python - numpy 数组操作:为什么 numpy 数组的地址与拼接后其子集的地址不同
问题描述
当我试图创建一个 numpy 数组并且我厌倦了使用拼接.ideals 来操作它时,拼接数组和原始数组应该保持不变,但它不是。为什么?
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, 3],
[ 7, 9]])
>>> a
array([[ 1, 99, 3, 4, 5],
[ 6, 7, 9, 10, 11]])
你的问题是为什么a反映c的变化?
- 因为 c 和 a 指向同一个对象
- 要制作 a 的副本,请创建一个新对象
如下-
>>> a
array([[ 1, 99, 3, 4, 5],
[ 6, 7, 9, 10, 11]])
>>> c=np.array(a)
>>> c
array([[ 1, 99, 3, 4, 5],
[ 6, 7, 9, 10, 11]])
>>> c[0,0]=100
>>> c
array([[100, 99, 3, 4, 5],
[ 6, 7, 9, 10, 11]])
>>> a
array([[ 1, 99, 3, 4, 5],
[ 6, 7, 9, 10, 11]])````
推荐阅读
- python - 协程中的异步任务
- .net - 不支持 DataContract 中的非映射字段
- apache-spark - Spark 流式加入 Kafka 主题对比
- java - java.lang.UnsupportedOperationException at java.nio.ByteBuffer.arrayOffset?
- laravel - 如果我将它保存在 laravel 的一个字段中的数组中,如何搜索单个 id?
- python - 打印字符串,而不是字符数
- javascript - Kendo UI & Javascript - 添加新记录时未获取数据
- ios - 在选项卡式视图控制器的更多选项卡中访问视图控制器列表
- haskell - 如何让 Haddock 使用我的后缀处理程序生成文档?
- android - WebView 侧边栏不展开