NumPy 的 ndarray
类型提供了非常灵活的切片功能,可以方便地访问和操作数组中的元素。切片允许您通过指定索引来选择数组的一部分。下面是一些基本的切片操作及其解释。
一维数组的切片
对于一维数组,切片操作类似于 Python 列表的切片。
示例
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 选择从索引 2 到 7(不包括 7)的元素
print(a[2:7]) # 输出: array([3, 4, 5, 6, 7])
# 选择从索引 0 到 5 的元素
print(a[:5]) # 输出: array([1, 2, 3, 4, 5])
# 选择从索引 5 到末尾的所有元素
print(a[5:]) # 输出: array([6, 7, 8, 9, 10])
# 选择所有元素
print(a[:]) # 输出: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 选择每隔一个元素
print(a[::2]) # 输出: array([ 1, 3, 5, 7, 9])
# 选择从倒数第 5 个元素到最后
print(a[-5:]) # 输出: array([6, 7, 8, 9, 10])
多维数组的切片
对于多维数组,切片可以在多个维度上进行。
示例
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 选择第一行
print(a[0, :]) # 输出: array([1, 2, 3])
# 选择最后一列
print(a[:, -1]) # 输出: array([3, 6, 9])
# 选择第二行的前两个元素
print(a[1, :2]) # 输出: array([4, 5])
# 选择第一列的前两行
print(a[:2, 0]) # 输出: array([1, 4])
# 选择第二行和第三列
print(a[1:2, 2:]) # 输出: array()
# 选择第一行和第三行的第二列
print(a[[0, 2], 1]) # 输出: array([2, 8])
更复杂的切片
您可以使用更复杂的切片表达式来选择特定的子数组。
示例
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 选择第二行和第三行的第一列
print(a[1:3, 0]) # 输出: array([4, 7])
# 选择第一行和第三行的所有列
print(a[[0, 2], :]) # 输出:
# array([[1, 2, 3],
# [7, 8, 9]])
# 选择第一列和第三列的所有行
print(a[:, [0, 2]]) # 输出:
# array([[1, 3],
# [4, 6],
# [7, 9]])
# 选择第一行和第二行的第二列
print(a[:2, 1]) # 输出: array([2, 5])
总结
- 单个索引:
- 使用单个索引选择一个元素。
- 切片:
- 使用
start:stop
形式的切片选择一个范围内的元素。 - 使用
start:stop:step
形式的切片选择每隔一定步长的元素。 - 使用
:
选择整个维度。
- 使用
- 多维切片:
- 在多维数组中,可以在每个维度上分别使用切片。
- 使用逗号
,
分隔不同维度上的索引或切片。