为多数组实现numpy.in1d的最有效方法

卢卡斯

实现函数的最佳方法是采用任意数量的1d数组并返回一个包含匹配值索引(如果有)的元组。

这是我想做的一些伪代码:

a = np.array([1, 0, 4, 3, 2])
b = np.array([1, 2, 3, 4, 5])
c = np.array([4, 2])

(ind_a, ind_b, ind_c) = return_equals(a, b, c)
# ind_a = [2, 4]
# ind_b = [1, 3]
# ind_c = [0, 1]

(ind_a, ind_b, ind_c) = return_equals(a, b, c, sorted_by=a)
# ind_a = [2, 4]
# ind_b = [3, 1]
# ind_c = [0, 1]

def return_equals(*args, sorted_by=None):
    ...
阿什维尼乔杜里(Ashwini Chaudhary)

您可以使用numpy.intersect1dreduce此:

def return_equals(*arrays):
    matched = reduce(np.intersect1d, arrays)
    return np.array([np.where(np.in1d(array, matched))[0] for array in arrays])

reduce可能有点慢,因为在这里创建中间的NumPy数组(对于大量输入,它可能很慢),如果我们使用Pythonset及其.intersection()方法可以避免这种情况

matched = np.array(list(set(arrays[0]).intersection(*arrays[1:])))

相关GitHub票证:集合操作的n数组版本,尤其是intersect1d

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章