题目
44 已知代码如下,matrix3的结果不是? matrix1 = np. array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) matrix2 = np. array([[1, 2, 3]]) matrix3 = matrix1 - matrix2 A. 报错 B. array([[0, 0, 0], [3, 3, 3], [6, 6, 6]]) C. array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) D. array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
44 已知代码如下,matrix3的结果不是? matrix1 = np. array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) matrix2 = np. array([[1, 2, 3]]) matrix3 = matrix1 - matrix2
A. 报错
B. array([[0, 0, 0], [3, 3, 3], [6, 6, 6]])
C. array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
D. array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
A. 报错
B. array([[0, 0, 0], [3, 3, 3], [6, 6, 6]])
C. array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
D. array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
题目解答
答案
### 问题解析
题目要求我们确定 `matrix3` 的结果,给定的代码如下:
```python
import numpy as np
matrix1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix2 = np.array([[1, 2, 3]])
matrix3 = matrix1 - matrix2
```
### 代码解析
1. **矩阵 `matrix1`**:
```python
matrix1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
```
`matrix1` 是一个 3x3 的二维数组,内容如下:
```
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
```
2. **矩阵 `matrix2`**:
```python
matrix2 = np.array([[1, 2, 3]])
```
`matrix2` 是一个 1x3 的二维数组,内容如下:
```
[[1, 2, 3]]
```
3. **矩阵 `matrix3`**:
```python
matrix3 = matrix1 - matrix2
```
这里进行了矩阵的减法操作。在 NumPy 中,当两个数组的形状不匹配时,NumPy 会尝试进行广播(broadcasting)。广播的规则是将较小的数组扩展到与较大数组相同的形状,以便进行逐元素操作。
在这个例子中,`matrix2` 是一个 1x3 的数组,而 `matrix1` 是一个 3x3 的数组。NumPy 会将 `matrix2` 沿着第一个维度(行)广播,使其变成一个 3x3 的数组,内容如下:
```
[[1, 2, 3],
[1, 2, 3],
[1, 2, 3]]
```
然后进行逐元素减法:
```
[[1, 2, 3], - [[1, 2, 3], = [[0, 0, 0],
[4, 5, 6], [1, 2, 3], [3, 3, 3],
[7, 8, 9]] [1, 2, 3]] [6, 6, 6]]
```
### 选项分析
- **选项 A: 报错**
- 不正确。根据广播规则,NumPy 会自动处理形状不匹配的问题,不会报错。
- **选项 B: array([[0, 0, 0], [3, 3, 3], [6, 6, 6]])**
- 正确。这是根据广播规则计算得到的结果。
- **选项 C: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])**
- 不正确。这是 `matrix1` 本身,而不是 `matrix1 - matrix2` 的结果。
- **选项 D: array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])**
- 不正确。这是 `matrix2` 广播后的结果,而不是 `matrix1 - matrix2` 的结果。
### 最终答案
`matrix3` 的结果不是 `array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])`,因此正确答案是:
**C array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])**
解析
本题考查NumPy数组的广播机制。关键在于理解不同形状的数组在进行算术运算时如何自动对齐。核心思路是掌握广播规则:当两个数组的维度不匹配时,较小的数组会被扩展到与大数组相同的形状,但必须满足广播的兼容性条件(如大小为1的维度可扩展)。
代码解析
- matrix1是3x3数组:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] - matrix2是1x3数组:
[[1, 2, 3]] - matrix3 = matrix1 - matrix2:
- 广播过程:matrix2的行数为1,与matrix1的3行不匹配。根据广播规则,matrix2会被沿行方向扩展为3行,形成:
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] - 逐元素相减:将扩展后的matrix2与matrix1对应元素相减,得到:
[[0, 0, 0], [3, 3, 3], [6, 6, 6]]
- 广播过程:matrix2的行数为1,与matrix1的3行不匹配。根据广播规则,matrix2会被沿行方向扩展为3行,形成:
选项分析
- 选项C是原matrix1的值,显然与减法结果不符,因此matrix3的结果不是选项C。