【问题标题】:Search numpy array inside numpy array在 numpy 数组中搜索 numpy 数组
【发布时间】:2012-10-22 21:57:12
【问题描述】:

我需要查找 numpy 数组是否在其他 numpy 数组中,但它的工作方式似乎与 python 列表不同。 我试图在 numpy 文档和互联网中搜索这个问题,但没有回答。 这是一个例子:

import numpy as np

m1=np.array([[1,2,3],[5,3,4]])
m2=np.array([5,4,3])
m2 in m1
True
m3=[[1,2,3],[5,3,4]]
m4=[5,4,3]
m4 in m3
False

在 numpy 中我得到 True,但在 Python 列表中我得到 False。是否有任何 numpy 函数可以完成这项工作?

谢谢。

【问题讨论】:

  • m3有错别字吗?你的意思是m3 = [[1, 2, 3], [5, 4, 3]] 代替m3 = [[1, 2, 3], [5, 3, 4]]。

标签: arrays search numpy


【解决方案1】:

要获得与in 相同的列表行为,您可以执行以下操作:

any(np.all(row == m2) for row in m1)

这会在 python 中对行进行循环,这并不理想,但它应该可以工作。

要了解 numpy in 是怎么回事,下面是对 in from Robert Kern on the numpy mailing list 语义的描述:

它可以追溯到布尔 (some_array) 的 Numeric 语义,这将 如果任何元素非零,则为 True。就像任何其他人一样 Python 中的可迭代容器,x in y 基本上可以做到

for row in y:
   if x == row:
       return True
return False

沿 y 的第一个轴迭代并通过布尔相等进行比较。在 Numeric/numpy 的情况下,这个比较是广播的。所以这就是为什么 [3,6,4] 有效,因为有一行 3 在第一行 柱子。 [4,2,345] 不起作用,因为 4 和 2 不在 那些列。

可能,这应该被认为是在过渡到 numpy 的 bool(some_array) 语义引发异常。 scalar in array 应该可以按原样用于 ND 阵列,但是 array in array 有几种不同的可能语义 应该明确说明,就像 bool(some_array)。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2018-05-27
    相关资源
    最近更新 更多