我有一个函数,有时会给我一个列表列表,其中嵌套列表有时只有一个项目,例如这一个:
a = [['1'], ['3'], ['w']]
并希望从该主列表a
中随机选择一个项目。如果我尝试在此列表中使用np.random.choice
,我会收到ValueError: a must be 1-dimensional
。
但如果列表是:
b = [['1'], ['3'], ['w', 'w']]
然后使用np.random.choice
完全正常。为什么是这样?我怎样才能这样做,以便我可以从两种类型的列表中随机选择?
答案 0 :(得分:3)
我认为choice
首先将您的列表转换为数组。
在第二种情况下,此数组是带有dtype对象的1d数组:
In [125]: np.array([['1'], ['3'], ['w', 'w']])
Out[125]: array([['1'], ['3'], ['w', 'w']], dtype=object)
In [126]: _.shape
Out[126]: (3,)
在第二个中,它创建了一个2d字符串数组:
In [127]: np.array([['1'], ['3'], ['w']])
Out[127]:
array([['1'],
['3'],
['w']],
dtype='<U1')
In [128]: _.shape
Out[128]: (3, 1)
这是一个定期出现的问题。 np.array
尝试在输入允许的情况下创建高维数组。
答案 1 :(得分:0)
回答&#34;如何使其发挥作用&#34;您可以使用的部分:
np.random.choice(np.squeeze(a))
请注意,这将取消a
的方括号,但不会删除b
的方括号。但可能仍然有用。