【问题标题】:Elementwise comparison of numpy arrays with different lengths不同长度的numpy数组的元素比较
【发布时间】:2016-04-13 15:23:29
【问题描述】:

我想比较两个不同长度的 3D numpy 数组的元素。目标是在两个数组中找到重叠的元素。

到目前为止,我发现的所有函数都依赖于两个长度相同的数组。

有没有一种有效的方法来比较二维元素(for 循环将非常低效,因为每个数组都有数万个元素)?

【问题讨论】:

  • 不清楚你到底想做什么。如果较小的数组的长度为n,而较大的数组的长度为m,那么您是否要将较大数组中的第一个n 元素与较小数组的所有元素进行比较?
  • 我想将第一个数组的所有 n 元素与第二个数组的所有 m 元素进行比较。或者换句话说:我想找到n 中也包含在m 中的所有元素
  • 添加样例?

标签: python arrays numpy


【解决方案1】:

这里有几种比较 2 个一维数组的方法:

In [325]: n=np.arange(0,10)
In [326]: m=np.arange(3,9)

In [327]: np.in1d(n,m)
Out[327]: array([False, False, False,  True,  True,  True,  True,  True,  True, False], dtype=bool)

In [328]: np.in1d(m,n)
Out[328]: array([ True,  True,  True,  True,  True,  True], dtype=bool)

In [329]: n[:,None]==m[None,:]
Out[329]: 
array([[False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [ True, False, False, False, False, False],
       [False,  True, False, False, False, False],
       [False, False,  True, False, False, False],
       [False, False, False,  True, False, False],
       [False, False, False, False,  True, False],
       [False, False, False, False, False,  True],
       [False, False, False, False, False, False]], dtype=bool)

farenorths 的建议

In [330]: np.intersect1d(n,m)
Out[330]: array([3, 4, 5, 6, 7, 8])

In [331]: np.where(np.in1d(n,m))
Out[331]: (array([3, 4, 5, 6, 7, 8], dtype=int64),)

【讨论】:

    【解决方案2】:

    intersect1d 是你想要的吗?例如,如果您的数组是 ab,您可以简单地这样做:

    duplicates = np.intersect1d(a, b)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2020-11-21
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多