python - 如何在 Python 中查找相交索引和值?

标签 python matlab numpy

我尝试将代码从 Matlab 转换为 Python 我在 Matlab 中有代码:

[value, iA, iB] = intersect(netA{i},netB{j});

我正在寻找 python 中的代码,这些代码可以找到 A 和 B 的公共(public)值,以及索引向量 ia 和 ib(对于每个公共(public)元素,它在 A 中的第一个索引和它在 B 中的第一个索引)。

我尝试使用不同的解决方案,但我收到了不同长度的向量。尝试使用 numpy.in1d/intersect1d ,但返回的值不一样。 我尝试做的事情:

def FindoverlapIndx(self,a, b):
    bool_a = np.in1d(a, b)
    ind_a = np.arange(len(a))
    ind_a = ind_a[bool_a]
    ind_b = np.array([np.argwhere(b == a[x]) for x in ind_a]).flatten()
    return ind_a, ind_b

 IS=np.arange(IDs[i].shape[0])[np.in1d(IDs[i], R_IDs[j])]
 IR = np.arange(R_IDs[j].shape[0])[np.in1d(R_IDs[j],IDs[i])]

我收到了不同长度的索引。但两者的长度必须与 Matlab 的 intersect 中的长度相同。

最佳答案

MATLAB's intersect(a, b)返回:

  • ab的公共(public)值,已排序
  • 他们每个人在a中的第一个位置
  • 它们在b
  • 中的第一个位置

NumPy 的 intersect1d 只做第一部分。所以我读了它的 source并修改它以返回索引。

import numpy as np
def intersect_mtlb(a, b):
    a1, ia = np.unique(a, return_index=True)
    b1, ib = np.unique(b, return_index=True)
    aux = np.concatenate((a1, b1))
    aux.sort()
    c = aux[:-1][aux[1:] == aux[:-1]]
    return c, ia[np.isin(a1, c)], ib[np.isin(b1, c)]

a = np.array([7, 1, 7, 7, 4]);
b = np.array([7, 0, 4, 4, 0]);
c, ia, ib = intersect_mtlb(a, b)
print(c, ia, ib)

这会打印出 [4 7] [4 0] [2 0],这与 MATLAB documentation page 上的输出一致,因为我使用了与他们相同的示例。当然,与 MATLAB 不同,索引在 Python 中是从 0 开始的。

说明:该函数从每个数组中取出唯一元素,将它们放在一起并连接:结果为[0 1 4 4 7 7]。每个数字在这里最多出现两次;当它重复时,这意味着它在两个数组中。这就是 aux[1:] == aux[:-1] 选择的原因。

数组ia 包含原始数组aa1 的每个元素的第一个索引。通过 isin(a1, c) 过滤它只留下 c 中的索引。 ib 也是如此。

编辑: 从版本 1.15.0 开始,intersect1d如果您通过 return_indices=True,则执行第二部分和第三部分:

x = np.array([1, 1, 2, 3, 4])
y = np.array([2, 1, 4, 6])
xy, x_ind, y_ind = np.intersect1d(x, y, return_indices=True)

从哪里可以得到 xy = array([1, 2, 4])x_ind = array([0, 2, 4])y_ind = 数组([1, 0, 2])

关于python - 如何在 Python 中查找相交索引和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45637778/

相关文章:

python - 导入错误 : No module named timeutils

matlab - matlab 中具有高斯分布和均匀分布的随机数

matlab - imwrite - 必须提供文件名

python - 使用 pandas 查找时间序列数据中缺失的分钟数据

python - 在 numpy 数组中查找最接近给定值的索引。仅限于外部索引

python - 将现有 Numpy ndarray 的值转换为元组

python - Django 1.6 for_concrete_model 解释

python - 读取电子邮件正文并将每一行放入不同的变量中

python - 用于查找字符串中超过 4 个连续重复字符的正则表达式

arrays - 在数组中查找唯一值的最快方法