Python MATLAB中多维数组逻辑运算的Numpy等价
我在MATLAB中编写了以下逻辑运算,其中[A、B、C和D]都是5x3x16双精度,而[A、B、C和D]都是240x1双精度。我正在尝试使用numpy在python中实现相同的逻辑操作Python MATLAB中多维数组逻辑运算的Numpy等价,python,matlab,numpy,multidimensional-array,Python,Matlab,Numpy,Multidimensional Array,我在MATLAB中编写了以下逻辑运算,其中[A、B、C和D]都是5x3x16双精度,而[A、B、C和D]都是240x1双精度。我正在尝试使用numpy在python中实现相同的逻辑操作 D = zeros(size(A)); for i = 1:numel(D) flag = ... (a == A(i)) & ... (b == B(i)) & ... (c == C(i)); D(i) = d(flag); e
D = zeros(size(A));
for i = 1:numel(D)
flag = ...
(a == A(i)) & ...
(b == B(i)) & ...
(c == C(i));
D(i) = d(flag);
end
d是一个已经填充了数据的列向量。a、 b和c也是大小相同的填充列向量。Meshgrid用于将A、B和C构造成A、B和C中唯一值的LxMxN网格。现在我想使用d来使用布尔表达式用适当的值填充LxMxN d
我试过:
D= np.zeros(np.shape(N))
for i in range(len(D)):
for j in range(len(D[0])):
for k in range(len(D[0][0])):
flag = np.logical_and(
(a == A[i][j][k]),
(b == B[i][j][k]),
(c == C[i][j][k])
)
D[i][j][k] = d[flag];
语法会有点混乱,但您可以使用函数来实现这一点。对。我认为这个函数会起作用。我一直在为语法而挣扎。为什么不
&
和|
?@CrisLuengo我认为它对多维np数组不起作用。我得到一个ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()@MGoforth:它说这应该有效。@MGoforth:a=np.random.rand(10,12,6);b=(a>0.4)和(a可能是欢迎访问该网站的副本。请确保提供(减少)样本数据和目标输出。这将使帮助更容易。我真的不清楚您希望D
在本文结尾处是什么。您能提供一些示例数据(例如,a、b和C,2x2x2和a、b、C和D,3x1)吗根据您希望/期望的输出?@aganders3很难给出一个示例,但我将尝试解释。d是一个已经填充了数据的列向量。a、b和c也是填充了大小相等的列向量。Meshgrid用于将a、b和c构建成一个LxMxN网格,其中包含a、b和c中唯一的值。现在我可以nt使用d使用布尔表达式用适当的值填充LxMxN d。