没有一个函数(我知道)将交换列的位置,因为您可以在发布时使用基本切片来执行此操作。您始终可以构建该类型的函数:
def swap(arr, *tups, copy=False):
ix = np.array(tups)
if copy:
arr = arr.copy()
arr[ix.ravel()] = arr[ix[:,::-1].ravel()]
return arr
swap(np.eye(6), (0,2), (1,3))
array([[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
</code>
如果你想要性能,我会建议使用稀疏矩阵。该
csr_matrix
存储非零列
indices
,使切换列容易:
import scipy.sparse as sparse
I = sparse.eye(6, format=’csr’)
I.indices[[0,2,1,3]] = I.indices[[2,0,3,1]]
print(I.todense())
array([[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
</code>