Python numpy中的对象传递问题

Python numpy在slide的过程中也会有对象传递,也就是地址传递,并不是直接copy过去,这个问题困扰我一天了,详情见下例,c数组中的第一个元素随着第二个元素的增加而改变了.

解决方案是用c.append(np.array(a[1])),将a[1]np.array()方法重新申明为numpy数组,因为np.array()默认copy矩阵中的元素再创建一个新的numpy.ndarray对象,但是与之很相近的np.asarray()则不copy,这两个方法在使用的时候要注意了,关于np.asarray()np.array()的区别,详情见asarray vs array

# 声明a为3*3的矩阵 
>>> import numpy as np
>>> a=np.zeros((3,3))
>>> a
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

# 声明b为3*1的矩阵,并赋值给a的第一行 
>>> b=np.ones((1,3))
>>> a[1]=b
>>> a
array([[ 0.,  0.,  0.],
       [ 1.,  1.,  1.],
       [ 0.,  0.,  0.]])

# 声明c为空矩阵,把a的第一行append到c 
>>> c=[]
>>> c.append(a[1])
>>> c
[array([ 1.,  1.,  1.])]

# 改变b,同时赋值给a的第一行  
>>> b=np.array([1,2,3])
>>> a[1]=b
>>> a
array([[ 0.,  0.,  0.],
       [ 1.,  2.,  3.],
       [ 0.,  0.,  0.]])

# 再次把a的第一行append到c中,发现c的第一个元素也跟着改变了
>>> c.append(a[1])
>>> c
[array([ 1.,  2.,  3.]), array([ 1.,  2.,  3.])]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值