You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.8 KiB
2.8 KiB
2.1.5:索引与切片
索引
ndarray 的索引其实和 python 的 list 的索引极为相似。元素的索引从 0 开始。代码如下:
import numpy as np
# a中有4个元素,那么这些元素的索引分别为0,1,2,3
a = np.array([2, 15, 3, 7])
# 打印第2个元素
# 索引1表示的是a中的第2个元素
# 结果为15
print(a[1])
# b是个2行3列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
# 打印b中的第1行
# 总共就2行,所以行的索引分别为0,1
# 结果为[1, 2, 3]
print(b[0])
# 打印b中的第2行第2列的元素
# 结果为5
print(b[1][1])
输出如下:
15
[1 2 3]
5
遍历
ndarray 的遍历方式与 python 的 list 的遍历方式也极为相似,示例代码如下:
import numpy as np
a = np.array([2, 15, 3, 7])
# 使用for循环将a中的元素取出来后打印
for element in a:
print(element)
# 根据索引遍历a中的元素并打印
for idx in range(len(a)):
print(a[idx])
# b是个2行3列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
# 将b展成一维数组后遍历并打印
for element in b.flat:
print(element)
# 根据索引遍历b中的元素并打印
for i in range(len(b)):
for j in range(len(b[0])):
print(b[i][j])
输出如下:
2
15
3
7
2
15
3
7
1
2
3
4
5
6
1
2
3
4
5
6
切片
ndarray 的切片方式与 python 的 list 的遍历方式也极为相似,对切片不熟的同学也不用慌,套路很简单,就是用索引。
假设想要将下图中紫色部分切片出来,就需要确定行的范围和列的范围。由于紫色部分行的范围是 0 到 2 ,所以切片时行的索引范围是 0:3 (索引范围是左闭右开);又由于紫色部分列的范围也是 0 到 2 ,所以切片时列的索引范围也是 0:3 (索引范围是左闭右开)。最后把行和列的索引范围整合起来就是 [0:3, 0:3] (逗号左边是行的索引范围)。当然有时为了方便,0 可以省略,也就是 [:3, :3] 。
切片示例代码如下:
import numpy as np
# a中有4个元素,那么这些元素的索引分别为0,1,2,3
a = np.array([2, 15, 3, 7])
'''
将索引从1开始到最后的所有元素切片出来并打印
结果为[15 3 7]
'''
print(a[1:])
'''
将从倒数第2个开始到最后的所有元素切片出来并打印
结果为[3 7]
'''
print(a[-2:])
'''
将所有元素倒序切片并打印
结果为[ 7 3 15 2]
'''
print(a[::-1])
# b是个2行3列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
'''
将第2行的第2列到第3列的所有元素切片并打印
结果为[[5 6]]
'''
print(b[1:, 1:3])
'''
将第2列到第3列的所有元素切片并打印
结果为[[2 3]
[5 6]]
'''
print(b[:, 1:3])
输出如下:
[15 3 7]
[3 7]
[7 3 15 2]
[[5 6]]
[[2 3]
[5 6]]