维度索引
Coddy NumPy 基础 课程的第 13 课,共 18 课。
Numpy 支持一种非常强大的工具:维度索引。
要对维度进行索引,我们使用冒号 :。冒号会取出它所在的特定索引处的所有元素。例如,假设我们有一个形状为 ary.shape # --> (2, 1, 3, 1) 的数组,在 ary[:, 0, 0, 0] 中放置冒号 :,会取出形状中最左侧的两个元素,并为这两个元素分别提取其余维度中的第零个元素。
注意:冒号在 brackets [] 中的位置,就是我们要索引的维度,也就是说:
ary[:, 0, 0, 0]对 4D 维度进行索引ary[0, :, 0, 0]对 3D 维度进行索引ary[0, 0, :, 0]对 2D 维度进行索引ary[0, 0, 0, :]对 1D 维度进行索引ary[:, :, 0, 0]对 4D 和 3D 维度进行索引- 等等
示例 1
ary = np.array([
[1, 2],
[3, 4]
])
ary[:, 0] # --> [1, 3]
ary[0, :] # --> [1, 2]冒号会取出指定索引处的所有元素,然后继续处理下一个索引。
在这个例子中:
ary[:, 0]我们取出所有第一个元素,然后从每个元素中取出第 0 个元素。ary[0, :]我们取出第一个元素,然后从这个元素中取出所有元素。
示例 2
3D 数组
ary = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
ary[:, 0, :] # --> [[1, 2], [5, 6]]
ary[:, :, 0] # --> [[1, 3], [5, 7]]ary[:, 0, :]我们取出所有元素,然后取出第一个元素,最后取出其中的所有内容。ary[:, :, 0]我们取出所有元素,然后取出这些元素中的所有内容,最后从每个元素中取出第一个元素。- 你能猜出
ary[0, :, :]的输出是什么吗?
示例 3
获取每一行的第一个和最后一个索引处的元素
x = np.array([
[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
])
x[:, np.array([0, -1])]
>>> [0, 5, 6, 11, 12, 17, 18, 23]示例 4
一个形状为 (2, 1, 3, 1) 的数组,就像开头示例中的数组一样。
ary = np.array([
[
[
[1],[2],[3]
]
],
[
[
[4],[5],[6]
]
]
])
ary[:, 0, 0, 0] # --> [1, 4]
ary[0, :, 0, 0] # --> [1]
ary[0, 0, :, 0] # --> [1, 2, 3]
ary[0, 0, 0, :] # --> [1]注意:也可以使用我们在 Slicing 课中学过的切片语法:start:stop:step。
ary[:, 0:5, 2:3, :]
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单给定一个 3D 数组 ary,从每个 1D 数组中获取第 2、第 3 和第 4 个数字。
亲手试试
import numpy as np
'''
ary looks like:
array([[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],
[[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],
[[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]])
'''
ary = np.arange(0, 100).reshape(5, 2, 10) # don't change ary
res = ary[] # <-- Complete indices
print(str(res).replace("\n", "")) # don't change this lineNumPy 基础中的所有课
自己练习: Python 在线编译器