【问题标题】:Randomly select item from list of lists gives ValueError从列表列表中随机选择项目给出 ValueError
【发布时间】:2016-08-08 04:21:28
【问题描述】:

我有一个函数有时会给我一个列表列表,其中嵌套列表有时只有一个项目,例如这个:

a = [['1'], ['3'], ['w']]

并且想要从主列表a 中随机选择一项。如果我尝试在此列表中使用np.random.choice,我会得到ValueError: a must be 1-dimensional。

但如果列表改为:

b = [['1'], ['3'], ['w', 'w']]

然后使用np.random.choice 工作得很好。为什么是这样?以及如何才能使我可以从两种类型的列表中随机选择?

【问题讨论】:

  • 最简单的方法是只使用random.choice。你不需要 numpy 来做所有事情。

标签: python python-2.7 numpy nested-lists


【解决方案1】:

我认为choice 是首先将您的列表变成一个数组。

在第二种情况下,这个数组是一个 dtype 对象的一维数组:

In [125]: np.array([['1'], ['3'], ['w', 'w']])
Out[125]: array([['1'], ['3'], ['w', 'w']], dtype=object)
In [126]: _.shape
Out[126]: (3,)

在第二个中,它创建了一个二维字符串数组:

In [127]: np.array([['1'], ['3'], ['w']])
Out[127]: 
array([['1'],
       ['3'],
       ['w']], 
      dtype='<U1')
In [128]: _.shape
Out[128]: (3, 1)

这是一个周期性出现的问题。 np.array 尝试创建输入允许的高维数组。

Prevent numpy from creating a multidimensional array

【讨论】:

【解决方案2】:

要回答“如何使其工作”部分,您可以使用:

np.random.choice(np.squeeze(a))

请注意,这将消除a 的方括号,但不会消除b 的方括号。但可能仍然有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多