我运行了以下python代码:
import numpy as np
a_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]
np.random.choice(a_list, size=20,
replace=True)
Run Code Online (Sandbox Code Playgroud)
期待这样的结果:
[[7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2], [1, 2, 3], [1, 2, 3], [10, 1, 2], [1, 2, 3], [7, 8, 9], [1, 2, 3], [1, 2, 3], [10, 1, 2], [4, 5, 6], [4, 5, 6], [10, 1, 2], [10, 1, 2], [7, 8, 9], [1, 2, 3], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
但我得到的是下面的错误消息:
ValueError Traceback (most recent call last)
<ipython-input-80-c11957aca587> in <module>()
2 a_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]
3 np.random.choice(a_list, size=20,
----> 4 replace=True)
mtrand.pyx in mtrand.RandomState.choice()
ValueError: a must be 1-dimensional
Run Code Online (Sandbox Code Playgroud)
你如何从二维列表中随机选择?
您将需要使用索引:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]])
indices = np.arange(arr.shape[0])
output = arr[np.random.choice(indices, 20)]
Run Code Online (Sandbox Code Playgroud)
或者,甚至更短(基于 hpaulj 的评论):
output = arr[np.random.choice(arr.shape[0],20)]
Run Code Online (Sandbox Code Playgroud)
或者可以这样做map:
print(list(map(lambda x: random.choice(a_list),range(20))))
Run Code Online (Sandbox Code Playgroud)
演示:
import random
a_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]
print(list(map(lambda x: random.choice(a_list),range(20))))
Run Code Online (Sandbox Code Playgroud)
输出:
[[7, 8, 9], [10, 1, 2], [4, 5, 6], [10, 1, 2], [4, 5, 6], [10, 1, 2], [7, 8, 9], [4, 5, 6], [7, 8, 9], [1, 2, 3], [7, 8, 9], [1, 2, 3], [1, 2, 3], [10, 1, 2], [10, 1, 2], [10, 1, 2], [4, 5, 6], [10, 1, 2], [1, 2, 3], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)