根据其他数组的阈值创建新的二维numpy数组



我有3个2d数组,我想用它们初始化一个新的2d数组。根据其他3个阵列的(x,y)位置中的值,新的2d阵列应在位置(x,y)中填充0或1。

例如,我有以下3个2d阵列:

A = [[2, 3, 6],    B = [[5, 9, 0],    C = [[2, 7, 6],
     [9, 8, 3],         [2, 4, 3],         [2, 1, 6],
     [1, 0, 5]]         [4, 5, 1]]         [4, 6, 8]]

还有一个逻辑函数:

D = (A > 4 && B < 5 && C > 5)

这应该创建2d数组:

D = [[0, 0, 1], 
     [0, 0, 0],
     [0, 0, 1]]

现在我可以用2个for循环来完成这项工作,但我想知道是否有更快的numpy方法?

编辑

以下是我的真实代码示例:

val_max = 10000
a = np.asarray(array_a)
b = np.asarray(array_b)
d = ((a >= val_max) and (b >= val_max)).astype(int)

但我得到了这个错误:

Traceback (most recent call last):
  File "analyze.py", line 70, in <module>
    d = ((a >= val_max) and (b >= val_max)).astype(int)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

EDIT2

我应该使用&运算符而不是and(类似于'|'与or

给定A、B和C,您只需将它们转换为numpy数组,并使用计算D

import numpy as np
A = np.asarray(A)
B = np.asarray(B)
C = np.asarray(C)
D = ((A > 4) & (B < 5) & (C > 5)).astype(int)

尝试:

import numpy as np
A = np.asarray(A)
B = np.asarray(B)
C = np.asarray(C)
D = ((A > 4) & (B < 5) & (C > 5)).astype(int)

最新更新