我想交换2行pylab矩阵a。但是,当使用[0],a [1] = a [1],a [0]时,它不起作用:
>>> from pylab import *
>>> a = matrix([ [1.,2.] , [3.,4.] ])
>>> print a
[[ 1. 2.]
[ 3. 4.]]
>>> a[0],a[1] = a[1],a[0]
>>> print a
[[ 3. 4.]
[ 3. 4.]]
如何正确交换行?
谢谢!
答案 0 :(得分:3)
a[[1,0]]
获取第2行,然后是第1行,如果您想要回写:
In [842]: a[[0,1]]=a[[1,0]]
In [843]: a
Out[843]:
matrix([[ 3., 4.],
[ 1., 2.]])
或使其成为一种功能:
In [848]: def swapMatRow(mat, r1, r2):
...: mat[[r1,r2]]=mat[[r2, r1]]
...:
In [850]: a = np.matrix([ [1.,2.] , [3.,4.] ])
In [851]: swapMatRow(a, 0, 1)
In [852]: a
Out[852]:
matrix([[ 3., 4.],
[ 1., 2.]])
答案 1 :(得分:3)
索引/切片返回数组的视图,交换项目可以使用包含其中一行副本的临时变量:
>>> a = np.matrix([ [1.,2.] , [3.,4.] ])
>>> temp = a[0].copy() #New copy of a[0]
>>> a[0], a[1] = a[1], temp
>>> a
matrix([[ 3., 4.],
[ 1., 2.]])
简单的a[0], a[1] = a[1], a[0]
不起作用,因为NumPy不返回项本身,而是返回数组项的视图。因此,一旦第一个作业a[0] <-- a[1]
完成,我们实际上也改变了另一个项a[0]
(在RHS上),因此下一个作业a[1] <-- a[0]
只会导致复制新a[0]
到a[1]
,因此我们重复了a[1]
次。
答案 2 :(得分:0)
您也可以撤消行:
In [125]: a = a[::-1]
In [126]: a
Out[126]:
matrix([[ 3., 4.],
[ 1., 2.]])