繁体   English   中英

来自numpy.random.choice()的数组列表中的随机数组

[英]Random array from list of arrays by numpy.random.choice()

我有一个类似于lstB的数组列表,想随机选择2D数组。 问题是numpy不能以某种方式平等对待列表中的对象:

lstA = [numpy.array(0), numpy.array(1)]
lstB = [numpy.array([0,1]), numpy.array([1,0])]

print(numpy.random.choice(lstA))   # returns 0 or 1
print(numpy.random.choice(lstB))   # returns ValueError: must be 1-dimensional

是否有针对性的解决方法?

我们称其为半优雅...

# force 1d object array
swap = lstB[0]
lstB[0] = None
arrB = np.array(lstB)
# reinsert value
arrB[0] = swap
# and clean up
lstB[0] = swap
# draw
numpy.random.choice(arrB)
# array([1, 0])

说明:您遇到的问题似乎是将输入列表转换为数组时的numpy将使数组尽可能深。 由于所有列表元素都是相同长度的序列,因此将为2d。 此处显示的hack迫使它通过临时插入不兼容的元素来制作对象dtype的一维数组。

但是,我个人不会使用它。 因为如果使用此方法绘制多个子数组,则会得到一维数组,这可能不是您想要的,而且转换起来很麻烦。

因此,我实际上会接受其中一项建议的建议,即绘制int,然后在np.array(lstB)使用高级索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM