[英]swapping rows in pylab matrix
我想交换2行的pylab矩阵a。 但是,当使用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.]]
如何正确交换行?
谢谢!
如果您想回写a[[1,0]]
获得第二行,然后获得第一行:
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.]])
索引/切片返回数组的视图,可以使用包含以下行之一的副本的临时变量来交换项目:
>>> 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]
重复两次。
您还可以反转行:
In [125]: a = a[::-1]
In [126]: a
Out[126]:
matrix([[ 3., 4.],
[ 1., 2.]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.