NumPy 是 Python 中处理数组的核心工具,其灵活的操作和高效的计算能力广泛应用于数据科学。本文将分析四段 NumPy 代码的输出结果或正确性,梳理涉及的知识点,帮助读者深入理解 NumPy 的数组操作。
问题 1:数组加法分析
代码:
python
import numpy as np
arr1 = np.ones((2,2))
arr2 = np.eye(2)
print(arr1 + arr2)
选项:
- A.
[[2. 1.] [1. 2.]]
- B.
[[2. 2.] [2. 2.]]
- C.
[[3. 1.] [1. 3.]]
- D. 程序抛出异常
输出结果:
- A.
[[2. 1.] [1. 2.]]
知识点分析:
-
np.ones((2,2))
:- 生成一个 2×2 的全 1 数组,结果为
[[1. 1.] [1. 1.]]
。 - 默认数据类型为浮点数(
float64
)。
- 生成一个 2×2 的全 1 数组,结果为
-
np.eye(2)
:- 生成一个 2×2 的单位矩阵,结果为
[[1. 0.] [0. 1.]]
。 - 对角线为 1,其余为 0。
- 生成一个 2×2 的单位矩阵,结果为
-
数组加法:
- NumPy 支持元素级运算,
arr1 + arr2
将两个形状相同的数组对应元素相加:[[1. + 1., 1. + 0.], [1. + 0., 1. + 1.]]
=[[2. 1.] [1. 2.]]
。
- 输出为浮点数格式,与 A 一致。
- NumPy 支持元素级运算,
-
错误选项分析:
- B 表示全 2,忽略了
eye
的 0 值。 - C 的对角线值为 3,计算错误。
- D 无异常,因为形状匹配。
- B 表示全 2,忽略了
问题 2:数组比较分析
代码:
python
import numpy as np
arr1 = np.random.randint(1,10,(2,3))
print(arr1 < 10)
选项:
- A.
True
- B.
False
- C.
[[ True True True] [ True True True]]
- D.
[[ True False False] [False False True]]
输出结果:
- C.
[[ True True True] [ True True True]]
知识点分析:
-
np.random.randint(1,10,(2,3))
:- 生成一个 2×3 的数组,元素为 1 到 9(不包括 10)的随机整数。
-
比较运算:
arr1 < 10
对数组每个元素与 10 进行比较,返回布尔数组。- 因为
random.randint(1,10)
的范围是[1, 9]
,所有元素都小于 10,结果为全True
的 2×3 数组。
-
输出格式:
- NumPy 的布尔数组输出为
True
/False
,形状与原数组一致,与 C 匹配。
- NumPy 的布尔数组输出为
-
错误选项分析:
- A 和 B 是标量,无法表示数组比较结果。
- D 包含
False
,与随机范围不符。
问题 3:数组重塑分析
代码:
python
import numpy as np
a = np.array([1,2,3,4,5,6])
b = a.reshape((2,3))
print(b)
选项:
- A. 数组
a
是一维数组 - B. 数组
b
是二维数组 - C. 数组
b
是一个 2 行 3 列的数组 - D. 程序输出结果是:
array([[1, 2, 3], [4, 5, 6]])
不正确选项:
- 无(所有选项均正确)
知识点分析:
-
np.array([1,2,3,4,5,6])
:- 创建一个一维数组,长度为 6,
a.ndim = 1
,A 正确。
- 创建一个一维数组,长度为 6,
-
a.reshape((2,3))
:- 将一维数组重塑为 2×3 的二维数组,
b.ndim = 2
,B 正确。 - 形状为
(2, 3)
,即 2 行 3 列,C 正确。 - 重塑后元素按顺序填充:
[[1, 2, 3], [4, 5, 6]]
,D 正确。
- 将一维数组重塑为 2×3 的二维数组,
-
注意事项:
- 题目问"不正确"的选项,但所有描述均符合代码行为,因此可能存在题目设计问题。假设题意为验证正确性,则全对。
问题 4:数组切片分析
代码:
python
import numpy as np
a = np.linspace(10,18,9)
a.resize((3,3))
print(a[:2,:2])
选项:
- A.
[[10.]]
- B.
[[10. 11.] [13. 14.]]
- C.
[[10. 11. 12.] [13. 14. 15.] [16. 17. 18.]]
- D.
[[10. 13.] [11. 14.]]
输出结果:
- B.
[[10. 11.] [13. 14.]]
知识点分析:
-
np.linspace(10,18,9)
:- 生成从 10 到 18 的 9 个等间隔数:
- 步长 =
(18 - 10) / (8)
= 1,结果为[10, 11, 12, 13, 14, 15, 16, 17, 18]
。
-
a.resize((3,3))
:-
将 9 个元素重塑为 3×3 数组:
lua[[10, 11, 12], [13, 14, 15], [16, 17, 18]]
-
-
切片
a[:2, :2]
:-
取前 2 行(
0:2
)、前 2 列(0:2
),结果为:lua[[10, 11], [13, 14]]
-
与 B 选项一致。
-
-
错误选项分析:
- A 仅一个元素,范围太小。
- C 是整个数组,忽略切片。
- D 行列顺序错误。
总结
通过分析,我们梳理了以下 NumPy 知识点:
- 数组创建 :
ones
、eye
、linspace
、random.randint
的作用与输出。 - 数组运算:元素级加法和比较返回同形状结果。
- 形状操作 :
reshape
和resize
改变数组维度。 - 切片:二维数组的行、列索引方法。