python - 如何在 3d numpy 数组中查找 2d 数组的行

标签 python arrays numpy

我试图在 3d numpy ndarray 中找到 2d 数组出现的行。这是我的意思的一个例子。给:

arr = [[[0, 3], [3, 0]],
       [[0, 0], [0, 0]],
       [[3, 3], [3, 3]],
       [[0, 3], [3, 0]]]

我想找到所有出现的:

[[0, 3], [3, 0]]

我想要的结果是:

[0, 3]

我尝试使用 argwhere 但不幸的是我无处可去。有什么想法吗?

最佳答案

尝试

np.argwhere(np.all(arr==[[0,3], [3,0]], axis=(1,2)))

工作原理:

arr == [[0,3], [3,0]] 返回

array([[[ True,  True],
        [ True,  True]],

       [[ True, False],
        [False,  True]],

       [[False,  True],
        [ True, False]],

       [[ True,  True],
        [ True,  True]]], dtype=bool)

这是一个三维数组,最里面的轴是2。这个轴上的值是:

[True, True]
[True, True]
[True, False]
[False, True]
[False, True]
[True, False]
[True, True]
[True, True]

现在使用 np.all(arr==[[0,3], [3,0]], axis=2) 您正在检查一行中的两个元素是否都是 True 其形状将从 (4, 2, 2) 缩减为 (4, 2)。像这样:

array([[ True,  True],
       [False, False],
       [False, False],
       [ True,  True]], dtype=bool)

您需要再减少一步,因为您希望它们都相同([0, 3][3, 0]。您可以通过减少结果来做到这一点(现在最里面的轴是 1):

np.all(np.all(test, axis = 2), axis=1)

或者你也可以通过为轴参数提供一个元组来一步一步地做同样的事情(首先是最里面的,然后是更高的一步)。结果将是:

array([ True, False, False,  True], dtype=bool)

关于python - 如何在 3d numpy 数组中查找 2d 数组的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36381230/

相关文章:

python - 类型错误 : tensor is not a torch image

调用函数后 C 数组损坏

c - 如何将一维和二维数组参数传递给 c 中的函数

python - Numpy ":"运营商广播问题

python - 解析二维数组中的字符串推送值

python - PyCharm 中的 Numpy 导入错误(导入多数组 numpy 扩展模块失败)

python - 如何覆盖 BaseHTTPRequestHandler log_message() 方法以记录到文件而不是控制台 (sys.stderr)?

python - QSlider 具有 "arbitrary"值(来自列表/数组)?

python - 用Scrapy向回调函数传递参数,这样可以在以后崩溃时接收参数

c++ - 传递数组的差异