不同维度的两个numpy数组按列求交集

6

我有两个不同的numpy数组。第一个是二维数组,看起来像这样(前十个点):

[[  0.           0.        ]
 [ 12.54901961  18.03921569]
 [ 13.7254902   17.64705882]
 [ 14.11764706  17.25490196]
 [ 14.90196078  17.25490196]
 [ 14.50980392  17.64705882]
 [ 14.11764706  17.64705882]
 [ 14.50980392  17.25490196]
 [ 17.64705882  18.03921569]
 [ 21.17647059  34.11764706]]

第二个数组仅为一维数组,看起来像这样(前十个点):
[ 18.03921569  17.64705882  17.25490196  17.25490196  17.64705882
  17.64705882  17.25490196  17.64705882  21.17647059  22.35294118]

第二个(一维)数组中的值可能出现在第一个(二维)数组的第一列中。例如:17.64705882

我想从两个维度的数组中获取一个数组,其中第一列的值与第二个(一维)数组中的值匹配。如何做到这一点?

1个回答

5

您可以使用np.in1d(array1, array2)来搜索array2中的每个值在array1中是否存在。在您的情况下,您只需要取第一个数组的第一列:

mask = np.in1d(a[:, 0], b)
#array([False, False, False, False, False, False, False, False,  True,  True], dtype=bool)

您可以使用此掩码获取所遇到的值:
a[:, 0][mask]
#array([ 17.64705882,  21.17647059])

2
浮点数相等性测试需要注意一些常规预防措施,例如.1 + .1 + .1 == .3的结果为False,因此除非这些值确实相等,而不仅仅是在非浮点算术中等效,否则事情可能会出现很大问题。 - Jaime
@Jaime 很好的评论。你知道他们是否有计划在 np.in1d 中添加一个 tolerance 参数吗? - Saullo G. P. Castro
2
这是有道理的,对于in1d来说,它似乎是一个明确定义的问题。我不知道是否有人在处理它,但欢迎提交拉取请求!;-) - Jaime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接