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

x4k*_*k3p 6 python arrays axis numpy intersection

我给出了两个不同的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]]
Run Code Online (Sandbox Code Playgroud)

第二个数组只是一维的,看起来像(前十点):

[ 18.03921569  17.64705882  17.25490196  17.25490196  17.64705882
  17.64705882  17.25490196  17.64705882  21.17647059  22.35294118]
Run Code Online (Sandbox Code Playgroud)

第二个(一维)数组中的值可能出现在第一列中的第一个(二维)数组中.Fe 17.64705882

我想从二维数组中获取一个数组,其中第一列的值与第二个(一维)数组中的值匹配.怎么做?

Sau*_*tro 5

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

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

您可以使用此掩码来获取遇到的值:

a[:, 0][mask]
#array([ 17.64705882,  21.17647059])
Run Code Online (Sandbox Code Playgroud)

  • 浮点等式测试的常用预防措施适用,例如`.1 + .1 + .1 == .3`计算为'False`,所以除非值真正相等,不是简单地等效于非浮点运算,事情可能会出错. (2认同)
  • 它可能有意义,而对于`in1d`来说,它似乎是一个定义明确的问题.我不知道有人在研究它,但总是欢迎拉请求!;-) (2认同)