我正在寻找一种方法来获得两个形状(n_1, m)和(n_2, m)的二维numpy.array之间的交集。请注意,n_1和n_2可以不同,但m对于这两个数组是相同的。以下是两个包含预期结果的最小示例:
import numpy as np
array1a = np.array([[2], [2], [5], [1]])
array1b = np.array([[5], [2]])
array_intersect(array1a, array1b)
## array([[2],
## [5]])
array2a = np.array([[1, 2], [3, 3], [2, 1], [1, 3], [2, 1]])
array2b = np.array([[2, 1], [1, 4], [3, 3]])
array_intersect(array2a, array2b)
## array([[2, 1],
## [3, 3]])如果有人知道我应该如何实现array_intersect函数,我将不胜感激!
发布于 2019-04-16 04:19:27
使用集合怎么样?
import numpy as np
array2a = np.array([[1, 2], [3, 3], [2, 1], [1, 3], [2, 1]])
array2b = np.array([[2, 1], [1, 4], [3, 3]])
a = set((tuple(i) for i in array2a))
b = set((tuple(i) for i in array2b))
a.intersection(b) # {(2, 1), (3, 3)}发布于 2019-04-16 04:28:23
从第一个数组构造一组元组,并测试第二个数组的每一行。或者反之亦然。
def array_intersect(a, b):
s = {tuple(x) for x in a}
return np.unique([x for x in b if tuple(x) in s], axis=0)发布于 2019-04-16 04:36:43
另一种方法是利用广播特性
import numpy as np
array2a = np.array([[1, 2], [3, 3], [2, 1], [1, 3], [2, 1]])
array2b = np.array([[2, 1], [1, 4], [3, 3]])
test = array2a[:, None] == array2b
print(array2b[np.all(test.mean(0) > 0, axis = 1)]) # [[2 1]
# [3 3]]但这是可读性较差的imo。编辑:或使用唯一和集合组合。简而言之,有很多选择!
https://stackoverflow.com/questions/55696432
复制相似问题