##### ndarray 索引
- 在 NumPy 数组中,索引是用来访问单个元素的方法。索引是从 0 开始的整数,用于指定元素在数组中的位置。使用方括号 `[]` 来进行索引操作。
- 对于一维数组,使用一个索引获取一个元素,例如:`arr[2]`。
- 对于多维数组,使用逗号分隔的索引序列来获取元素,从高维到低维,例如:`arr[1, 2]` 表示获取第二行第三列的元素。
- 索引还可以使用负数,表示从数组的末尾开始计算位置,例如:`arr[-1]` 表示最后一个元素。
- 布尔数组索引 `arr[布尔运算]`
- 整数数组索引 `arr[[行索引],[列索引]]`
```python
import numpy as np
# 一维数组索引
arr1d = np.array([1, 2, 3, 4])
print(arr1d[2]) # 输出:3
# 多维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2]) # 输出:6
# 布尔数组索引
bool_arr = arr2d > 3
print(arr2d[bool_arr]) # 输出:[4 5 6]
# 整数数组索引
indices = np.array([0, 1])
print(arr2d[indices, :]) # 输出:[[1 2 3]
# [4 5 6]]
```
##### ndarray 切片
- 切片是一种获取数组的子数组的方法。它通过指定开始索引、结束索引和步长来选取连续的元素。
- 切片使用冒号 `:` 进行表示,例如:`arr[1:4]` 表示获取索引从 1 到 3 的元素。
- 切片的起始索引默认为 0,结束索引默认为数组的长度。
- 切片也可以使用负数索引和步长,例如:`arr[::-1]` 表示将数组反转。
- `a[:, None]` 可以将一维数组变为具有单列的二维数组。
```python
import numpy as np
# 一维数组切片
arr1d = np.array([1, 2, 3, 4, 5, 6])
print(arr1d[1:4]) # 输出:[2 3 4]
print(arr1d[::2]) # 输出:[1 3 5]
# 多维数组切片
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[1:3, 0:2]) # 输出:
# [[4 5]
# [7 8]]
# 切片步长
print(arr1d[1:5:2]) # 输出:[2 4]
print(arr2d[::2, 1]) # 输出:[2 8]
```