NumPy 模块
NumPy 是 Python 中用于数值计算的核心库,截至 2025 年 6 月,最新版本为 1.26.2。它提供了丰富的方法和属性,方便处理多维数组和矩阵运算。将通过表格梳理方法及其说明,并以独立代码块呈现示例,便于学习掌握。
一、数组创建方法
| 方法 |
说明 |
|
| np.array() |
将列表、元组等可迭代对象转换为 ndarray 数组,可自动推断数据类型 |
***** |
| np.zeros() |
创建指定形状,元素全为 0 的数组,数据类型默认为float64 |
***** |
| np.ones() |
生成指定形状,元素全为 1 的数组,可通过dtype参数指定数据类型 |
***** |
| np.empty() |
创建指定形状的未初始化数组,元素值为内存中的随机值,使用前需赋值 |
|
| np.arange() |
按指定的起始值、终止值和步长创建等差数列数组,类似 Python 的range()函数,但返回 NumPy 数组 |
***** |
| np.linspace() |
在指定区间内均匀生成指定数量的元素 |
***** |
import numpy as np
# np.array()示例
arr = np.array([1, 2, 3])
arr_2d = np.array([[1, 2], [3, 4]])
print("一维数组:", arr)
print("二维数组:", arr_2d)
# np.zeros()示例
zeros_arr = np.zeros((3, 4))
print("全零数组:", zeros_arr)
# np.ones()示例
ones_arr = np.ones((2, 2), dtype=int)
print("全一数组:", ones_arr)
# np.empty()示例
empty_arr = np.empty((3,))
print("未初始化数组:", empty_arr)
# np.arange()示例
range_arr = np.arange(1, 10, 2)
print("等差数列数组:", range_arr)
# np.linspace()示例
linspace_arr = np.linspace(0, 1, 5)
print("等间距数组:", linspace_arr)
二、数组属性
| 属性 |
说明 |
| shape |
获取数组的形状,返回一个表示维度大小的元组 |
| dtype |
获取数组的数据类型,如float64、int32等 |
| ndim |
获取数组的维度,1D 数组返回 1,2D 数组返回 2,依此类推 |
| size |
获取数组元素的总数 |
| itemsize |
获取数组中每个元素占用的字节数 |
import numpy as np
# shape示例
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("数组形状:", arr.shape)
# dtype示例
arr = np.array([1, 2, 3], dtype=float)
print("数组数据类型:", arr.dtype)
# ndim示例
arr_1d = np.array([1, 2, 3])
arr_2d = np.array([[1, 2], [3, 4]])
print("一维数组维度:", arr_1d.ndim)
print("二维数组维度:", arr_2d.ndim)
# size示例
arr = np.array([[1, 2], [3, 4]])
print("数组元素总数:", arr.size)
# itemsize示例
arr = np.array([1, 2, 3], dtype=np.int32)
print("每个元素占用字节数:", arr.itemsize)
三、数组运算方法
| 方法 |
说明 |
| np.add() |
对两个数组对应元素相加,返回新数组 |
| np.subtract() |
对两个数组对应元素相减,返回新数组 |
| np.multiply() |
对两个数组对应元素相乘,返回新数组 |
| np.divide() |
对两个数组对应元素相除,返回新数组 |
| np.sum() |
计算数组元素的总和,可通过axis参数指定维度计算列和或行和 |
| np.mean() |
计算数组元素的平均值,支持按指定维度计算 |
| np.std() |
计算数组元素的标准差,衡量数据的离散程度 |
import numpy as np
# np.add()示例
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.add(arr1, arr2)
print("相加结果:", result)
# np.subtract()示例
arr1 = np.array([5, 7, 9])
arr2 = np.array([2, 4, 6])
result = np.subtract(arr1, arr2)
print("相减结果:", result)
# np.multiply()示例
arr1 = np.array([2, 3, 4])
arr2 = np.array([5, 6, 7])
result = np.multiply(arr1, arr2)
print("相乘结果:", result)
# np.divide()示例
arr1 = np.array([10, 20, 30])
arr2 = np.array([2, 4, 5])
result = np.divide(arr1, arr2)
print("相除结果:", result)
# np.sum()示例
arr = np.array([1, 2, 3, 4])
total = np.sum(arr)
print("数组元素总和:", total)
arr_2d = np.array([[1, 2], [3, 4]])
col_sum = np.sum(arr_2d, axis=0)
print("二维数组列和:", col_sum)
# np.mean()示例
arr = np.array([1, 2, 3, 4])
average = np.mean(arr)
print("数组元素平均值:", average)
arr_2d = np.array([[1, 2], [3, 4]])
col_mean = np.mean(arr_2d, axis=0)
print("二维数组列平均值:", col_mean)
# np.std()示例
arr = np.array([1, 2, 3, 4])
std_dev = np.std(arr)
print("数组元素标准差:", std_dev)
四、数组索引与切片方法
| 方法 |
说明 |
| getitem() |
支持一维数组索引单个元素、切片获取子数组;二维数组通过行、列索引或切片获取子矩阵 |
| np.where() |
根据给定条件,返回满足条件的元素索引 |
| np.extract() |
根据给定条件,提取数组中满足条件的元素 |
import numpy as np
# __getitem__()示例
arr = np.array([1, 2, 3, 4, 5])
element = arr[2]
sub_arr = arr[1:4]
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
sub_matrix = arr_2d[1:, 1:]
print("一维数组索引元素:", element)
print("一维数组切片结果:", sub_arr)
print("二维数组切片结果:", sub_matrix)
# np.where()示例
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 3)
print("满足条件的索引:", indices)
# np.extract()示例
arr = np.array([1, 2, 3, 4, 5])
condition = np.mod(arr, 2) == 0
result = np.extract(condition, arr)
print("根据条件提取的元素:", result)
五、数组变形方法
| 方法 |
说明 |
|
| reshape() |
在不改变数据内容的情况下,改变数组的形状,元素总数需保持一致 |
* |
| ravel() |
将多维数组展平为一维数组 |
|
| transpose() |
交换数组的行和列,实现数组转置 |
|
| squeeze() |
移除数组中维度为 1 的维度 |
|
import numpy as np
# reshape()示例
arr = np.array([1, 2, 3, 4, 5, 6])
new_arr = arr.reshape(2, 3)
print("变形后的数组:", new_arr)
# ravel()示例
arr_2d = np.array([[1, 2], [3, 4]])
flat_arr = arr_2d.ravel()
print("展平后的数组:", flat_arr)
# transpose()示例
arr = np.array([[1, 2], [3, 4]])
transposed_arr = arr.transpose()
print("转置后的数组:", transposed_arr)
# squeeze()示例
arr = np.array([[[1], [2], [3]]])
squeezed_arr = np.squeeze(arr)
print("移除单维度后的数组:", squeezed_arr)
补充:
np.dot():计算两个数组的点积,在矩阵运算中广泛应用,是实现神经网络前向传播、反向传播中矩阵乘法的核心方法:
# 模拟神经网络中一层的计算
input_data = np.array([[1, 2, 3]])
weights = np.array([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]])
output = np.dot(input_data, weights)
np.concatenate():沿指定轴连接多个数组,在数据合并、扩充数据集等场景中常用。比如,将训练集和验证集合并为新的数据集:
train_features = np.array([[1, 2], [3, 4]])
val_features = np.array([[5, 6], [7, 8]])
combined_features = np.concatenate((train_features, val_features), axis=0)