我试图从(N x N x N)
numpy数组中提取所有索引,其中A和B数组中的值都等于某个值x
- 找到常见的重叠。
我在尝试:
A[A==1 and B==1]
但是收到错误:
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我该如何解决这个问题?
答案 0 :(得分:3)
Numpy不能重载“和”关键字。然而,它重载二进制AND运算符&为了这。尝试:
A [(A == 1)& (B == 1)]
parantheses很重要。我发现它经常(并不总是)比logical_and
更易读答案 1 :(得分:1)
考虑以下三维数组,这些数组随机填充值-1,0和1:
import numpy as np
np.random.seed(2016) # use a fixed seed to get the same results on multiple runs
N = 3
A = np.random.randint(-1, 2, N**3).reshape([N, N, N])
B = np.random.randint(-1, 2, N**3).reshape([N, N, N])
请注意,您需要使用固定种子(例如2016)才能在多次运行中获得相同的结果:
>>> print A
[[[ 1 1 0]
[-1 1 -1]
[-1 -1 -1]]
[[ 0 1 1]
[-1 1 1]
[ 0 1 0]]
[[ 0 1 0]
[-1 1 1]
[-1 1 0]]]
>>> print B
[[[-1 0 0]
[-1 -1 1]
[ 0 -1 -1]]
[[-1 -1 -1]
[-1 1 1]
[-1 1 1]]
[[ 1 1 -1]
[-1 0 1]
[-1 1 -1]]]
如果您的目标是提取两个矩阵中<1>的元素的索引,您可能会发现此代码非常有用:
>>> np.transpose(np.where((A==1)*(B==1)))
array([[1, 1, 1],
[1, 1, 2],
[1, 2, 1],
[2, 0, 1],
[2, 1, 2],
[2, 2, 1]], dtype=int64)
答案 2 :(得分:0)
或许稍微仓促地发布这个问题。使用了numpy的
logical_and(x1, x2[, out])
最终完成了这项工作!