2017-01-30 249 views

回答

2

方法#1:下面是重塑成基于所述组尺寸的3D阵列的方法,索引与从np.random.permutation得到混洗索引的块的索引和最后重塑回2D -

N = 5 # Blocks of N rows 
M,n = a.shape[0]//N, a.shape[1] 
out = a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n) 

采样运行 -

In [141]: a 
Out[141]: 
array([[89, 26, 12], 
     [97, 60, 96], 
     [94, 38, 54], 
     [41, 63, 29], 
     [88, 62, 48], 
     [95, 66, 32], 
     [28, 58, 80], 
     [26, 35, 89], 
     [72, 91, 38], 
     [26, 70, 93]]) 

In [142]: N = 2 # Blocks of N rows 

In [143]: M,n = a.shape[0]//N, a.shape[1] 

In [144]: a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n) 
Out[144]: 
array([[94, 38, 54], 
     [41, 63, 29], 
     [28, 58, 80], 
     [26, 35, 89], 
     [89, 26, 12], 
     [97, 60, 96], 
     [72, 91, 38], 
     [26, 70, 93], 
     [88, 62, 48], 
     [95, 66, 32]]) 

方法2:你也可以简单地使用np.random.shuffle用于原位变化 -

np.random.shuffle(a.reshape(M,-1,n)) 

采样运行 -

In [156]: a 
Out[156]: 
array([[15, 12, 14], 
     [55, 39, 35], 
     [73, 78, 36], 
     [54, 52, 32], 
     [83, 34, 91], 
     [42, 11, 98], 
     [27, 65, 47], 
     [78, 75, 82], 
     [33, 52, 93], 
     [87, 51, 80]]) 

In [157]: N = 2 # Blocks of N rows 

In [158]: M,n = a.shape[0]//N, a.shape[1] 

In [159]: np.random.shuffle(a.reshape(M,-1,n)) 

In [160]: a 
Out[160]: 
array([[15, 12, 14], 
     [55, 39, 35], 
     [27, 65, 47], 
     [78, 75, 82], 
     [73, 78, 36], 
     [54, 52, 32], 
     [33, 52, 93], 
     [87, 51, 80], 
     [83, 34, 91], 
     [42, 11, 98]])