我有一个非常大的2D数组,看起来像这样:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Run Code Online (Sandbox Code Playgroud)
使用numpy,是否有一种简单的方法可以获得一个新的2D数组,例如从初始数组a中有2个随机行(无需替换)?
例如
b=
[[a4, b4, c4],
[a99, b99, c99]]
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 165
>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
[3, 2, 0],
[0, 2, 1],
[1, 1, 4],
[3, 2, 2],
[0, 1, 0],
[1, 3, 1],
[0, 4, 1],
[2, 4, 2],
[3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
[1, 3, 1]])
Run Code Online (Sandbox Code Playgroud)
将它放在一起用于一般情况:
A[np.random.randint(A.shape[0], size=2), :]
Run Code Online (Sandbox Code Playgroud)
对于非替换(numpy 1.7.0+):
A[np.random.choice(A.shape[0], 2, replace=False), :]
Run Code Online (Sandbox Code Playgroud)
我不相信有一种很好的方法可以在1.7之前无需替换就生成随机列表.也许您可以设置一个小的定义,以确保两个值不相同.
Hez*_*eff 43
这是一篇很老的帖子,但这对我来说最有用:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
Run Code Online (Sandbox Code Playgroud)
将replace = False更改为True以获得相同的内容,但需要替换.
iso*_*eel 23
如果您只想按特定因子对数据进行下采样,则另一种方法是创建随机掩码.假设我想要下采样到原始数据集的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])
Run Code Online (Sandbox Code Playgroud)
现在你可以调用data_arr[mask]并返回约25%的行,随机抽样.
这与Hezi Rasheff提供的答案类似,但经过简化,因此新的python用户可以理解发生了什么(我注意到许多新的数据科学专业的学生以最奇怪的方式获取随机样本,因为他们不知道自己在python中做什么。)
您可以使用以下方法从数组中获得许多随机索引:
indices = np.random.choice(A.shape[0], amount_of_samples, replace=False)
Run Code Online (Sandbox Code Playgroud)
然后,可以对numpy数组使用切片,以在这些索引处获取样本:
A[indices]
Run Code Online (Sandbox Code Playgroud)
这将从您的数据中获得指定数量的随机样本。
小智 5
如果你需要相同的行但只需一个随机样本,
import random
new_array = random.sample(old_array,x)
Run Code Online (Sandbox Code Playgroud)
这里的x必须是一个'int'来定义你想要随机选择的行数.
小智 5
我看到已建议排列。其实可以写成一行:
>>> A = np.random.randint(5, size=(10,3))
>>> np.random.permutation(A)[:2]
array([[0, 3, 0],
[3, 1, 2]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122921 次 |
| 最近记录: |