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',它定义了你想要随机挑选的行数。