我试图在 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/