2017-01-30 52 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]])