У меня есть два массива 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 или B в соответствии со значениями в A.
Чистый код 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)
, но результат был:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()