You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy切片与索引的结果差异是什么?子数组为何是原数组视图?

NumPy切片、掩码与花式索引的视图特性详解

在NumPy里,有个很容易踩坑的关键特性:通过切片、掩码索引或者花式索引得到的子数组,本质上只是原数组的视图,并不是独立的副本。也就是说,修改这个子数组的内容,会直接同步到原数组上。我用实际代码给你演示这个特性:

python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.11.0'
>>> # 切片操作示例:修改切片子数组,原数组同步变化
>>> a = np.arange(3); a[:2] = 111; a
array([111, 111, 2])
>>> # 掩码索引示例:修改掩码选中的子数组,原数组同样变化
>>> a = np.arange(3); a[a<2] = 222; a
array([222, 222, 2])

从上面的例子能明显看出来,不管用哪种方式获取子数组并修改,原数组都直接被改变了。这是因为视图和原数组共享同一块内存空间,NumPy这么设计是为了节省内存、提升效率。如果你需要的是独立的副本,记得调用子数组的.copy()方法,比如a[:2].copy(),这样修改副本就不会影响原数组了。

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:50:57