Python 根据两个不同数组的值填充Numpy数组
我有两个5x5x3阵列:Python 根据两个不同数组的值填充Numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我有两个5x5x3阵列: A = np.random.randint(0, 255, (5,5,3), np.uint8) B = np.random.randint(0, 255, (5,5,3), np.uint8) 我需要填充第三个数组C(a和B的形状相同),根据a中的值填充a或B中的值 纯Python代码应该是: C = np.zeros(A.shape, dtype=np.uint8) h, w, ch = C.shape for y in range(0, h): fo
A = np.random.randint(0, 255, (5,5,3), np.uint8)
B = np.random.randint(0, 255, (5,5,3), np.uint8)
我需要填充第三个数组C(a和B的形状相同),根据a中的值填充a或B中的值
纯Python代码应该是:
C = np.zeros(A.shape, dtype=np.uint8)
h, w, ch = C.shape
for y in range(0, h):
for x in range(0, w):
for z in range(0, ch):
if A[y, x, z] > 128:
C[y, x, z] = max(A[y, x, z], B[y, x, z])
else:
C[y, x, z] = min(A[y, x, z], B[y, x, z])
上面的代码可以工作,但对于大数组来说速度非常慢。
我对numpy的尝试如下:
C = np.zeros(A.shape, dtype=np.uint8)
C[A>128] = max(A,B)
C[A<128] = min(A,B)
请尝试以下代码:
C = np.zeros(shape=A.shape)
C = (A>128)*np.maximum(A,B)+(A<=128)*np.minimum(A,B)
C=np.zero(shape=A.shape)
C=(A>128)*np.maximum(A,B)+(APythons-min/max函数在numpy-ndarray上似乎无法按元素运行(这似乎是您正在寻找的)
您应该能够使用np.maximum和np.minimum
C[A>128] = np.maximum(A,B)[A>128]
C[A<=128] = np.minimum(A,B)[A<=128]
C[A>128]=np.最大值(A,B)[A>128]
C[A带np。可以避免在之前创建空数组。与A和B形状相同的np.maximum、np.minimum返回数组。条件A>128将从中选择正确的值
С = np.where(A>128, np.maximum(A,B), np.minimum(A,B))
毫无疑问,它是这项工作的正确工具。除非其他人使用变通方法,否则它就是为此而设计的。max
是Python标量函数。我认为您需要np.max(A,B)
,一个元素级的最大值。
С = np.where(A>128, np.maximum(A,B), np.minimum(A,B))