2012-08-24 172 views
0

是否有任何numpy函數或巧妙使用視圖來完成以下函數的功能?排列numpy的2d數組索引

import numpy as np 

def permuteIndexes(array, perm): 
    newarray = np.empty_like(array) 
    max_i, max_j = newarray.shape 
    for i in xrange(max_i): 
     for j in xrange(max_j): 
      newarray[i,j] = array[perm[i], perm[j]] 
    return newarray 

即,對於矩陣的列表中的perm索引的一個給定的排列,該函數計算應用這種排列,以矩陣的索引的結果。

回答

6
def permutateIndexes(array, perm): 
    return array[perm][:, perm] 

其實,這是更好,因爲它是在一個單一的去:

def permutateIndexes(array, perm): 
    return array[np.ix_(perm, perm)] 

同非方陣工作:

def permutateIndexes(array, perm): 
    return array[np.ix_(*(perm[:s] for s in array.shape))] 
+0

hummm!我必須學習如何正確使用這些觀點。有沒有任何指導? –

+1

@ RafaelS.Calsaverini如果你還沒有閱讀[Tentative NumPy Tutorial](http://www.scipy.org/Tentative_NumPy_Tutorial),請務必閱讀。 – ecatmur