numpy中两种切片修改值后原数组变化差异的原因咨询
核心原因:NumPy 两种索引模式的视图/副本差异
这个差异本质是NumPy对不同索引方式的内存处理规则不同:
- 数组
A来自基础切片索引,是原数组X的视图:
用:形式的范围切片属于基础切片范畴,这种索引不会分配新的内存,生成的数组只是共享原数组的内存空间,相当于给原数组的部分区域开了一个新的访问入口。你修改视图的元素,本质就是修改原数组对应内存地址的值,因此A[1,1] = 99会同步改动X的对应位置。 - 数组
B来自高级索引(花式索引),是原数组X的副本:
只要索引参数传入了自定义的整数数组、布尔数组,就属于高级索引范畴,这种索引会开辟独立的新内存空间,把选中的元素值复制一份生成新数组,和原数组完全没有内存关联。你修改副本的元素不会影响原数组,因此B[1,1] = 100不会改动X的内容。
你可以通过base属性验证两者的区别:打印A.base会输出原数组X,而B.base返回None,说明B是拥有独立内存的新数组。
内容的提问来源于stack exchange,提问作者Hajin Lee
相关产品推荐
相关产品推荐

