首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维numpy数组的交集

二维numpy数组的交集
EN

Stack Overflow用户
提问于 2019-04-16 03:59:50
回答 5查看 786关注 1票数 1

我正在寻找一种方法来获得两个形状(n_1, m)(n_2, m)的二维numpy.array之间的交集。请注意,n_1n_2可以不同,但m对于这两个数组是相同的。以下是两个包含预期结果的最小示例:

代码语言:javascript
复制
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函数,我将不胜感激!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-04-16 04:19:27

使用集合怎么样?

代码语言:javascript
复制
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)}
票数 1
EN

Stack Overflow用户

发布于 2019-04-16 04:28:23

从第一个数组构造一组元组,并测试第二个数组的每一行。或者反之亦然。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2019-04-16 04:36:43

另一种方法是利用广播特性

代码语言:javascript
复制
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。编辑:或使用唯一和集合组合。简而言之,有很多选择!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55696432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档