繁体   English   中英

交换pylab矩阵中的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM