python - 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
解决方案
np.random.uniform(size=(256,1))>-.5
或者
np.random.uniform(size=(256,3))>-.5
推荐阅读
- javascript - 按伪类选择项目
- c++ - 使用 gcc 和 gprof 添加自定义范围
- java - 在 Maven 依赖项中找不到类
- c# - 将 content-type 标头添加到 httpclient GET 请求
- cloudkit - 如何对 CloudKit 记录值求和
- node.js - 为什么我会收到错误消息 Cast to ObjectId failed for value \"[Function: ObjectId]"?
- flutter - 列表中的错误“不支持的操作:removeLast”
由 Uri.parse('').pathSegments 生成 - javascript - NX 工作区,如何使用 cli 更改 Angular 应用程序名称?
- c# - 滚动面板时在运行时关闭/打开 WS_EX_COMPOSITED
- unix - 我正在尝试列出上元音或下元音,我不确定命令的其余部分是否正确