Python numpy中的对象传递问题

来源:互联网 发布:zepto.js swipeleft 编辑:程序博客网 时间:2024/05/29 18:18

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))>>> aarray([[ 0.,  0.,  0.],       [ 0.,  0.,  0.],       [ 0.,  0.,  0.]])# 声明b为3*1的矩阵,并赋值给a的第一行 >>> b=np.ones((1,3))>>> a[1]=b>>> aarray([[ 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>>> aarray([[ 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.])]
2 0
原创粉丝点击