2016-01-13 104 views
1

在我的申請,我有一個這樣的數組:如何顛倒numpy中的子數組?

[10,20,30, 
40,50,60, 
70,80,90, 

0.1,0.2,0.3, 
0.4,0.5,0.6, 
0.7,0.8,0.9, 

1,2,3, 
4,5,6, 
7,8,9] 

我想每9號反讓自己的陣列看起來像這樣:

[90,80,70, 
60,50,40, 
30,20,10, 

0.9,0.8,0.7, 
0.6,0.5,0.4, 
0.3,0.2,0.1, 

9,8,7, 
6,5,4, 
3,2,1] 

有人可以告訴我怎麼做有效率的?

回答

3

也許是這樣的:

n = a.shape[0] 
a.reshape((n//9,9))[:,::-1].reshape((n,)) 

array([ 90. , 80. , 70. , 60. , 50. , 40. , 30. , 20. , 10. , 
     0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 
     9. , 8. , 7. , 6. , 5. , 4. , 3. , 2. , 1. ]) 

但是這依賴於有是你的數組中的9個元素的倍數。它使原始數組保持不變。要改變原來的a就地你可以使用resize

a.resize((n//9,9)) 
a[:,::-1] = a 
a.resize((n,)) 
+0

謝謝,它的工作原理! – Demonedge

0

這工作。不知道它是否是最有效的方式:

import numpy 


    a = numpy.array([10,20,30, 
    40,50,60, 
    70,80,90, 

    0.1,0.2,0.3, 
    0.4,0.5,0.6, 
    0.7,0.8,0.9, 

    1,2,3, 
    4,5,6, 
    7,8,9]) 

    # reshape and transpose 
    b = a.reshape(-1,9).T 
    # reverse 
    b = b[::-1] 
    # convert back to flat array 
    print b.T.flatten() 
    # in one line 
    print (a.reshape(-1,9).T[::-1].T).flatten()