首页 > 解决方案 > numpy where 用于数组数组

问题描述

下面的代码让 me array([1, 1, 2]),这是预期的。

condition = [True, True, False]
array1 = [1, 1, 1]
array2 = [2, 2, 2]
print np.where(condition, array1, array2)

但是,如果我的 array1/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 获取随机元素的数组(整个元素,例如,它应该保留整个 array1[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)

做我想要实现的非pythonic方式如下:

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

标签: pythonarraysnumpy

解决方案


np.random.uniform(size=(256,1))>-.5

或者

np.random.uniform(size=(256,3))>-.5

推荐阅读