numpy array交换行或列

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]])

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值