置换numpy的2d数组索引

时间:2012-08-24 18:33:59

标签: python arrays numpy multidimensional-array

是否有任何numpy函数或巧妙使用视图来完成以下函数的功能?

 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中矩阵的索引的给定排列,该函数计算将该置换应用于矩阵的索引的结果。

1 个答案:

答案 0 :(得分: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))]