Numpy中的冒号、None、slice(None)在数组索引器中的使用
在本文中,我们将介绍Numpy数组索引器中常用的三个对象:冒号(:)、None和slice(None),它们在Numpy中的使用极为广泛,是Numpy中非常常见和实用的一些技巧。
阅读更多:Numpy 教程
冒号(:)
在Numpy数组索引器中,冒号(:)表示“所有”,用来表示一个维度或多个维度的全部内容。例如,我们可以使用冒号访问数组的全部行或全部列。
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 访问所有行和列,即整个数组
print(arr[:, :])
# 访问第一行和第二行,所有列
print(arr[0:2, :])
# 访问所有行,第二列和第三列
print(arr[:, 1:])
在第一个print语句中,冒号(:)出现了两次,分别表示访问数组的所有行和所有列。在第二个print语句中,冒号的左侧和右侧分别表示访问数组的第一行和第二行,所有列。在第三个print语句中,冒号表示访问数组的所有行,冒号右侧的数字1表示访问数组的第二列及以后的所有列。
None
None在Numpy数组索引器中的使用是用来表示空维度。当我们希望访问数组的某一维度时,如果该维度上的位置是None,则表示忽略该维度上的内容。示例如下:
import numpy as np
arr = np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
# 访问第一张图片,第二行,所有列
print(arr[0, 1, :])
# 访问所有图片,第一列,第二个像素点
print(arr[:, 0, 1])
在第一个print语句中,我们使用了None来表示访问的是数组的第一张图片,第二行的全部列,即忽略了数组的第一维。在第二个print语句中,我们使用了None来表示访问的是数组的所有图片,第一列的第二个像素点,即忽略了数组的第二维。
slice(None)
当我们希望在Numpy数组索引器中使用None来表示忽略某一维度的时候,如果这个维度是数组的第一个维度,我们可以省略None,直接使用一个冒号。但如果这个维度不是第一个维度,我们就必须使用slice(None)来表示。示例如下:
import numpy as np
arr = np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
# 访问所有图片,第一行,所有列
print(arr[:, 0, :])
# 访问所有图片,第二列,第一个像素点
print(arr[:, :, 1])
在第一个print语句中,我们可以简单地使用一个冒号来表示访问数组的所有图片,第一行的所有列。但在第二个print语句中,我们需要访问数组的所有图片,第二列的第一个像素点,因此我们需要使用slice(None)来表示忽略数组的第二维。
总结
在Numpy数组索引器中使用冒号、None和slice(None)是非常常见和实用的一些技巧。通过灵活运用这些对象,我们可以实现对Numpy数组的高效访问和操作。
极客笔记