[英]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.