python - Numpy 查找匹配列的索引

标签 python numpy indexing

我有一个大的 2xn 数组 A 和一个较小的 2xn 数组 B。B 中的所有列都可以在 A 中找到。我希望通过匹配 B 中的列来查找 A 的索引。例如,

import numpy

A = numpy.array([
    [101, 101, 101, 102, 102, 103, 103, 104, 105, 106, 107, 108, 108, 109, 109, 110, 110, 211],
    [102, 103, 105, 104, 106, 109, 224, 109, 110, 110, 108, 109, 110, 211, 212, 211, 212, 213]
])

B = numpy.array([
    [101, 103, 109],
    [102, 224, 212]
])

我正在寻找的答案是[0,6,14]。有兴趣知道是否有一种有效的方法而不是循环。谢谢!

最佳答案

对于您的问题几乎没有一个好的答案:numpy 不太适合此类问题,尽管可以做到。要进行子数组搜索,如果您的数据类型不是浮点,则方法 here可能是你最好的选择。您可以从以下内容开始:

AA = np.ascontiguousarray(A.T)
BB = np.ascontiguousarray(B.T)

dt = np.dtype((np.void, AA.dtype.itemsize * AA.shape[1]))
AA = AA.view(dt).ravel()
BB = BB.view(dt).ravel()

现在只是在另一个一维数组中搜索一个一维数组中的项目,这非常简单,假设原始 A 数组中没有重复的列。

如果您的任何一个数组非常小(如您的示例所示),则很难击败以下内容:

indices = np.argmax(AA == BB[:, None], axis = 1)

但对于较大的数据集,很难击败排序方法:

sorter = np.argsort(AA)
sorted_indices = np.searchsorted(AA, BB, sorter=sorter)
indices = sorter[sorted_indices]

关于python - Numpy 查找匹配列的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24205045/

相关文章:

postgresql - Postgres : syntax error creating index using prgm GIN

python - Numpy:arr[...,0,:] 有效。但是如何存储切片命令中包含的数据 (..., 0, :)?

python - 将 numba 添加到 python 脚本

python - Python 和 Numpy 的 ValueError

python - python中的Dijkstra算法

python - numpy 维度

python - 如何在x轴上以正确的频率绘制信号的FFT?

c# - Elasticsearch NEST索引和索引

python - 在内存中生成一个大文件并将其流式传输到对象存储中

python - Spark worker 不断删除和添加执行程序