【基础】NumPy:高级数组操作与技巧
发布时间: 2024-06-26 12:01:05 阅读量: 73 订阅数: 115
![【基础】NumPy:高级数组操作与技巧](https://ask.qcloudimg.com/http-save/8934644/fd9a445a07f11c8608626cd74fa59be1.png)
# 2.1 数组广播和通用函数
### 2.1.1 数组广播的概念
数组广播是一种在不同形状的数组上执行算术运算的技术。当数组具有不同的形状时,NumPy会自动扩展较小的数组,使其与较大的数组具有相同的形状。
例如,考虑以下数组:
```python
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])
```
当我们执行 `a + b` 时,NumPy会将 `a` 广播为:
```python
[[1, 1, 1],
[1, 1, 1]]
```
然后,它对广播后的 `a` 和 `b` 进行逐元素加法:
```python
[[5, 6, 7],
[8, 9, 10]]
```
# 2. NumPy高级数组操作
### 2.1 数组广播和通用函数
#### 2.1.1 数组广播的概念
数组广播是NumPy中的一种机制,它允许对具有不同形状的数组进行操作,而无需显式地调整其形状。当数组具有不同的形状时,NumPy会将它们广播到一个共同的形状,以便它们可以逐元素进行操作。
广播规则如下:
- 如果两个数组具有相同的形状,则它们逐元素进行操作。
- 如果一个数组的形状比另一个数组的形状小,则它将被广播到另一个数组的形状。广播规则是:
- 如果一个维度的大小为1,则它将被广播到另一个数组的相应维度。
- 如果一个维度的大小大于1,则它不能被广播。
#### 2.1.2 通用函数的应用
通用函数是NumPy中的一组内置函数,可以逐元素应用于数组。它们非常高效,并且可以处理各种数据类型。
以下是一些常用的通用函数:
| 函数 | 描述 |
|---|---|
| `np.add()` | 元素相加 |
| `np.subtract()` | 元素相减 |
| `np.multiply()` | 元素相乘 |
| `np.divide()` | 元素相除 |
| `np.power()` | 元素求幂 |
| `np.sqrt()` | 元素开平方 |
| `np.log()` | 元素取对数 |
| `np.exp()` | 元素求指数 |
```python
# 创建两个不同形状的数组
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])
# 使用通用函数逐元素相加
c = np.add(a, b)
# 打印结果
print(c)
```
```
[[5 7 9]
[8 10 12]]
```
### 2.2 数组索引和切片
#### 2.2.1 高级索引技术
高级索引允许使用布尔索引数组或整数索引数组来选择数组中的特定元素。
**布尔索引**
布尔索引数组是一个与要索引的数组具有相同形状的布尔数组。它用于选择满足特定条件的元素。
```python
# 创建一个数组
a = np.array([1, 2, 3, 4, 5])
# 创建一个布尔索引数组
idx = np.array([True, False, True, False, True])
# 使用布尔索引选择元素
b = a[idx]
# 打印结果
print(b)
```
```
[1 3 5]
```
**整数索引数组**
整数索引数组是一个包含整数的数组。它用于选择数组中特定位置的元素。
```python
# 创建一个数组
a = np.array([1, 2, 3, 4, 5])
# 创建一个整数索引数组
idx = np.array([0, 2, 4])
# 使用整数索引选择元素
b = a[idx]
# 打印结果
print(b)
```
```
[
```
0
0