Numpy:从二维数组中获取随机的一组行
我有一个非常大的二维数组,看起来像这样:
a= [[a1, b1, c1], [a2, b2, c2], ..., [an, bn, cn]]
使用numpy,是否有一个简单的方法来获得一个新的二维数组,例如从初始数组a(无replace),例如2个随机行?
例如
b= [[a4, b4, c4], [a99, b99, c99]]
>>> 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]])
把它放在一起的一般情况下:
A[np.random.randint(A.shape[0], size=2), :]
对于非replace(numpy 1.7.0+):
A[np.random.choice(A.shape[0], 2, replace=False), :]
我不相信有一个好方法可以在1.7之前生成随机列表而无需replace。 也许你可以设置一个小的定义,确保两个值不一样。
这是一个旧post,但是这对我来说最适合:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
将replace = False更改为True以获得相同的结果,但是用replace。
另一个select是创build一个随机掩码,如果你只是想按照一定的因子下载你的数据。 假设我想下样到原始数据集的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%的行,随机抽样。
如果你需要相同的行,但只是一个随机样本,
import random new_array = random.sample(old_array,x)
这里的x必须是一个'int',它定义了你想要随机挑选的行数。