Python NumPy ndarray 数组索引与切片详解
本文详细介绍Python中NumPy库ndarray数组的索引与切片操作。涵盖一维及多维数组的取值方法,区分直接索引与链式索引,并深入解析切片操作的内存共享特性。通过代码示例演示如何使用.copy()方法避免数据意外修改,帮助开发者高效处理数组数据。
索引与切片概述
索引和切片是读取或查询数组内容的基本手段,也是提取关键信息的核心方式。
数组索引操作详解
关于索引操作
- 针对一维数组,需在数组名后使用中括号[]指定索引编号,例如通过data[1]获取对应元素。
- 对于n维数组:有两种方式
- 处理多维数组时,第一种方式是利用列表形式指定坐标,例如data_2dim[1,0]。
- 第二种方式是将多维数组视为嵌套的一维数组进行链式取值,例如data_2dim[1][0]。
数组切片操作详解
关于切片操作
- 针对一维数组,在数组名后的中括号内指定切片范围m:n,其中冒号分隔符表示区间为m≤index<n,例如data[2:4]。若省略m和n,默认m为0,n为数组长度,即截取首尾元素。需注意这与MATLAB的冒号表达式存在差异。
- 针对n维数组,同样可视为嵌套的一维数组进行链式取值。需注意多维数组切片结果通常仍为多维数组,若需获取具体元素,需在切片后继续执行索引操作。
索引与切片代码演示
以下代码演示了索引与切片的具体操作:
import numpy as np
data = np.array([0,1,2,3,4,5])
print(data[1])
print(data[2:4])
data_2dim = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(data_2dim[1,0])
print(data_2dim[1][0])
print(data_2dim[1:4])
print(data_2dim[1:4][1:3][1][2])运行结果如下:
1 [2 3] 4 4 [[ 4 5 6] [ 7 8 9] [10 11 12]] 12 [Finished in 1.3s]
切片内存共享机制
总结而言,索引和切片均属于对数组的读取操作,且都使用方括号[]来界定编号范围。
内存共享示例
需特别注意,切片生成的变量与原数组变量在底层共享同一块内存区域。因此,若修改切片变量,原数组的对应元素也会随之改变。具体示例如下:
data = np.arange(10)
data_slice = data[3:6]
print(data)
print(data_slice)
data_slice[2] = 100
print(data)
print(data_slice)运行结果如下:
[0 1 2 3 4 5 6 7 8 9] [3 4 5] [ 0 1 2 3 4 100 6 7 8 9] [ 3 4 100] [Finished in 2.2s]
使用.copy()避免数据修改
若希望在修改切片时保持原数组数据不变,可调用.copy()方法。对上述代码进行适当调整后,结果如下:
data = np.arange(10)
data_slice = data[3:6].copy()
print(data)
print(data_slice)
data_slice[2] = 100
print(data)
print(data_slice)[0 1 2 3 4 5 6 7 8 9] [3 4 5] [0 1 2 3 4 5 6 7 8 9] [ 3 4 100] [Finished in 2.5s]
本文介绍了Python中ndarray数组索引与切片的实现方法,更多相关Python ndarray数组索引和切片内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













