2016-01-13 100 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()