numpy array交换行或列
Python中一般不需要重写swap函数,一般情况下交换两个变量的值只需要
a, b = b, a
但是ndarray格式的矩阵不能以这样的形式交换
In [1]: a = np.array(((1,2), (3,4), (5,6), (7,8)))
In [2]: a
Out[2]:
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
In [3]: a[:,0], a[:,1] = a[:,1], a[:,0]
In [4]: a
Out[4]:
array([[2, 2],
[4, 4],
[6, 6],
[8, 8]])
原因未明
查询到资料中,python对于这一类型的转换是先算出等号右边的值,再赋值给等号左边,按理应该能正常实现交换。
正确写法:
In [1]: a = np.array(((1,2), (3,4), (5,6), (7,8)))
In [2]: a
Out[2]:
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
In [3]: a[:,[1,0]]
Out[3]:
array([[2, 1],
[4, 3],
[6, 5],
[8, 7]])
当然,创建临时对象保存中间数据总是可行的,要注意在此处需要copy,而不能简单赋值
In [1]: a = np.array(((1,2), (3,4), (5,6), (7,8)))
In [2]: temp = a[:,1].copy()
In [3]: a[:,1] = a[:,0]
In [4]: a[:,0] = temp
In [5]: a
Out[5]:
array([[2, 1],
[4, 3],
[6, 5],
[8, 7]])