我有一个非常大的2D数组,看起来像这样:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
使用numpy,是否有一种简单的方法来获得一个新的2D数组,例如,从初始数组a中随机抽取2行(没有替换)?
e.g.
b=
[[a4, b4, c4],
[a99, b99, c99]]
我有一个非常大的2D数组,看起来像这样:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
使用numpy,是否有一种简单的方法来获得一个新的2D数组,例如,从初始数组a中随机抽取2行(没有替换)?
e.g.
b=
[[a4, b4, c4],
[a99, b99, c99]]
当前回答
如果你需要相同的行,但只是一个随机样本,
import random
new_array = random.sample(old_array,x)
这里x必须是一个'int'定义你想随机选择的行数。
其他回答
另一种选择是创建一个随机掩码,如果您只是想按某个因素对数据进行抽样。假设我想降低样本到25%的原始数据集,它目前保存在数组data_arr中:
# generate random boolean mask the length of data
# use p 0.75 for False and 0.25 for True
mask = numpy.random.choice([False, True], len(data_arr), p=[0.75, 0.25])
现在您可以调用data_arr[mask]并返回~25%的行,随机采样。
我看到有人建议排列。事实上,它可以变成一行:
>>> A = np.random.randint(5, size=(10,3))
>>> np.random.permutation(A)[:2]
array([[0, 3, 0],
[3, 1, 2]])
这是一个老帖子,但这是最适合我的:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
将replace=False更改为True以获得相同的东西,但使用replacement。
可以使用随机数生成器从给定数组中生成随机样本:
rng = np.random.default_rng()
b = rng.choice(a, 2, replace=False)
b
>>> [[a4, b4, c4],
[a99, b99, c99]]
如果你需要相同的行,但只是一个随机样本,
import random
new_array = random.sample(old_array,x)
这里x必须是一个'int'定义你想随机选择的行数。