微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy 数组操作:为什么 numpy 数组的地址与拼接后其子集的地址不同

如何解决numpy 数组操作:为什么 numpy 数组的地址与拼接后其子集的地址不同

当我尝试创建一个 numpy 数组并且我厌倦了使用拼接来操作它时。理想拼接数组和原始数组应该保持不变,但事实并非如此。为什么?

a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

我已经使用了这个数组 我现在拼接并更新它的值

c = a[:2,1:3]
c[0,0] = 99 

现在 a 的值也在其各自的位置更新 在python中,这仅在地址相同时发生

当我检查每个 ID 时,它显示不同

print(id(c),id(a))

输出

139866833241552 139866835761152

解决方法

array([[ 1,2,3,4,5],[ 6,7,9,10,11]])
>>> c=a[:2,1:3]
>>> c
array([[2,3],[7,9]])
>>> c[0,0]
2
>>> c[0,0]=99
>>> c
array([[99,[ 7,9]])
>>> a
array([[ 1,99,11]])

您的问题是为什么 c 中的 a 反映了变化?

  1. 因为 c 和 a 指向同一个对象
  2. 要复制a,您需要创建一个新对象

如下-

>>> a
array([[ 1,11]])
>>> c=np.array(a)
>>> c
array([[ 1,11]])
>>> c[0,0]=100
>>> c
array([[100,[  6,11]])
>>> a
array([[ 1,11]])````

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。