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

标签 python arrays sorting numpy indexing

实现一个函数的最佳方法是什么,该函数接受任意数量的一维数组并返回包含匹配值索引(如果有)的元组。

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

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):
    ...

最佳答案

为此,您可以将 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 数组(对于大量输入,它可能非常慢),如果我们使用 Python 的 set<,我们可以防止这种情况 及其 .intersection() 方法:

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

相关 GitHub 票证:n-array versions of set operations, especially intersect1d

关于python - 为多个数组实现 numpy.in1d 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082052/

相关文章:

python - 使用 python 将 Qt 与 Windows 7 任务栏集成?

arrays - 在数组中的特定索引处插入元素

java - 在 Java 中,当数组是 HashMap 的值时,更改数组的特定值

c - 打印二维字符数组,数字代表开头的行

javascript - meteor.js - 将数组推送到用户集合

mysql - 用字母对数字字符串进行排序

没有堆栈和递归,可以用C实现快速排序吗?

python - 如何在 python 中重新创建虚拟环境

python - 如何将一个 'for loop' 用于 2 个不同的列表

python - 添加确认以在 Python 中使用正则表达式搜索和替换