Numpy, где для массива массивов - PullRequest
0 голосов
/ 25 мая 2019

Следующий код получает меня 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

1 Ответ

0 голосов
/ 25 мая 2019
np.random.uniform(size=(256,1))>-.5

или

np.random.uniform(size=(256,3))>-.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...