python - 比较两个不同大小的 numpy 数组的最佳方法

标签 python numpy

我有 2 numpy array不同尺寸的s。从理论上讲,一个将是另一个的子集。我想在更大的 numpy array 中找到索引它的值与较小的子集匹配。

例如

A = [ 7.52   8.32  16.96  20.05 -24.96 -42.69 -47.47  55.04 -57.62   2.03
  61.94  64.41 -71.3   93.6  151.65 151.75  -0.43  -3.18   4.59  -5.55
   6.44  -9.48   9.31   0.67 -14.34  -8.09  16.23  17.69  19.46  23.52
 -52.59]

B = [61.94 16.23 19.46 -5.55 -0.43 93.6]

2 for循环可以完成这项工作,但我想知道是否有一种Python方法可以更快地做到这一点。

我尝试了一个循环,但它不起作用(我怀疑 numpy.where 不适用于不同大小的数组)

    def get_index(self, lst_1, lst_2):
        tmp_list = list()
        for i in range(min(len(lst_1), len(lst_2))):
            if np.where(lst_2[i] == lst_1):
                tmp_list.append(i)

        return tmp_list

如有任何建议,我们将不胜感激:)

谢谢

最佳答案

您可以使用np.in1d检查哪些索引匹配,您将得到一个 bool 数组。

>>> np.in1d(A,B)
array([False, False, False, False, False, False, False, False, False,
       False,  True, False, False,  True, False, False,  True, False,
       False,  True, False, False, False, False, False, False,  True,
       False,  True, False, False])

然后您可以执行以下操作来获取实际索引:

>>> np.arange(A.shape[0])[np.in1d(A,B)]
array([10, 13, 16, 19, 26, 28])

注意:对于大型数组来说,这执行得非常快,并且很容易检查相反的情况。 np.in1d(A,B,invert=True)np.arange(A.shape[0])[~np.in1d(A,B)]

编辑:正如评论中所建议的,一种明显的方式(我错过了,上帝知道为什么?!)来获取索引:np.nonzero(np.in1d(A ,B))

关于python - 比较两个不同大小的 numpy 数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745162/

相关文章:

python - 删除 Xarray 子图中的共享颜色条

Python 评估多项式回归

python - 如何在Python中将一个矩阵复制到一个更大的矩阵?

python - 将 NumPy 数组内容写入 Python 中的文件

python - 在 Windows 上使用 Git 访问 Mercurial 存储库

python - Pandas 键错误 : value not in index

python - 用更好的结构简化 for-if 困惑?

python - 为什么我的蒙版生成的形状多边形无效?

python - (Python) 无法查看 Matplotlib 图

python -\u0000 字符 `json.dumps` 的奇怪行为