【问题标题】:Intersection of two numpy arrays of different dimensions by column不同维度的两个numpy数组的交集按列
【发布时间】:2016-01-22 00:05:37
【问题描述】:

我给出了两个不同的 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]

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

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

【问题讨论】:

    标签: python arrays numpy axis intersection


    【解决方案1】:

    您可以使用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)
    

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

    a[:, 0][mask]
    #array([ 17.64705882,  21.17647059])
    

    【讨论】:

    • 适用于浮点相等测试的常见预防措施,例如.1 + .1 + .1 == .3 的计算结果为 False,因此除非值真的相等,而不是简单地在非浮点运算中相等,否则事情可能会出错。
    • @Jaime 很棒的评论。你知道他们有没有计划给np.in1d添加一个tolerance参数?
    • 这可能是有道理的,对于in1d,这似乎是一个定义明确的问题。我不知道有人在做这件事,但总是欢迎拉取请求! ;-)
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多