Следующий код получает меня array([1, 1, 2])
, что ожидается.
condition = [True, True, False]
array1 = [1, 1, 1]
array2 = [2, 2, 2]
print np.where(condition, array1, array2)
Однако, если мой массив 1/2 содержит сами списки, в них я получаю ошибку ValueError: operands could not be broadcast together with shapes (256,) (256,3) (256,3)
array1=np.random.uniform(size=(256,3))
array2=np.random.uniform(size=(256,3))
np.where([random.random()>0.5 for x in range(256)],array1, array2)
Как мне написать np.where, чтобы получить массив, который получает случайные элементы из array1 или array2 (например, целые элементы должны сохранять весь массив1 [0]).
--- Обновить
Если я использую следующее, как предлагается в комментариях / ответах
np.where([np.random.uniform(size=(256,3))>0.5 for x in range(256)],array1, array2)
или
np.where([np.random.uniform(size=(256,1))>0.5 for x in range(256)],array1, array2)
... в обоих случаях результирующая матрица имеетформа (256,256,3), но мне нужно, чтобы матрица была в форме (256,3)
Непитоновый способ сделать то, что я пытаюсь достичь, следующий:
def mix_arrays(array1, array2):
mix=[]
for x in range(np.shape(array1)[0]):
if random.random() > 0.5:
mix.append(array1[x])
else:
mix.append(array2[x])
return mix