2026-06-22 01:52:40
NumPy 是 Python 科学计算的基础包,其核心数据结构是 ndarray(N-dimensional array,多维数组)。
一、ndarray 的核心特性多维结构
支持任意维度的数组(如 1D 向量、2D 矩阵、3D 张量等),适合处理数值型数据集。
示例:
import numpy as nparr_1d = np.array([1, 2, 3]) # 1D 数组arr_2d = np.array([[1, 2], [3, 4]]) # 2D 数组同构数据类型
所有元素必须是相同类型(如全为 int32 或 float64),确保计算高效。
类型可通过 dtype 属性查看:
print(arr_1d.dtype) # 输出: int64(默认推断类型)高效运算
支持向量化操作(无需显式循环),底层用 C 实现,速度远超 Python 原生列表。
示例:
arr = np.array([1, 2, 3])print(arr * 2) # 输出: [2 4 6](每个元素乘以 2)从序列转换
使用 np.array() 将列表、元组等转换为 ndarray:
lst = [1, 2, 3]arr = np.array(lst)特殊数组生成
全零/全一数组:zeros()、ones()
zeros_arr = np.zeros((2, 3)) # 2x3 的全 0 数组ones_arr = np.ones(5) # 长度为 5 的全 1 数组未初始化数组:empty()(内容随机,速度快)
empty_arr = np.empty((2, 2)) # 可能包含内存垃圾值范围数组:arange()(类似 range,但返回数组)
range_arr = np.arange(0, 10, 2) # 输出: [0 2 4 6 8]指定数据类型
通过 dtype 参数显式定义类型:
float_arr = np.array([1, 2, 3], dtype=np.float64)支持的类型
整数:int8, int32, uint64 等
浮点数:float16, float64
布尔型:bool
字符串:str 或 U(Unicode)
类型转换
使用 astype() 方法(返回新数组):
int_arr = np.array([1.5, 2.7, 3.9])new_arr = int_arr.astype(np.int32) # 小数部分被截断 → [1, 2, 3]字符串转数值(若元素可解析):
str_arr = np.array(['1', '2', '3'])num_arr = str_arr.astype(np.int8)算术运算
元素级运算(加减乘除、幂次等):
a = np.array([1, 2])b = np.array([3, 4])print(a + b) # 输出: [4 6]print(a 2) # 输出: [1 4]广播机制
不同形状的数组可自动扩展运算(如标量与数组):
arr = np.array([[1, 2], [3, 4]])print(arr + 10) # 每个元素加 10索引与切片
类似列表,但支持多维索引:
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])print(arr_2d[1, 2]) # 输出: 6(第 2 行第 3 列)print(arr_2d[:, 1]) # 输出: [2 5](所有行的第 2 列)场景:计算一组数据的平方根
data = np.array([4, 9, 16])sqrt_data = np.sqrt(data) # 输出: [2. 3. 4.]场景:矩阵乘法
mat_a = np.array([[1, 2], [3, 4]])mat_b = np.array([[5, 6], [7, 8]])result = np.dot(mat_a, mat_b) # 或 mat_a @ mat_b六、注意事项ndarray 默认是内存连续的,但切片操作可能返回视图(非副本),修改视图会影响原数组。
避免频繁类型转换或小数组操作,尽量使用向量化计算。
通过 ndarray,NumPy 为科学计算提供了高效、便捷的底层支持,是 Pandas、SciPy 等库的基础。掌握其创建、运算和类型处理是数据分析的关键一步。