NumPy 是 Python 中用于科学计算的基础库,它提供了高效的多维数组对象以及处理这些数组的工具。以下为你详细介绍 NumPy,包括基本概念、常用功能和代码示例。
基本概念
- ndarray:NumPy 的核心对象是
ndarray
(N-dimensional array,多维数组),它是一个同构的数据容器,即数组中的所有元素必须是相同的数据类型。ndarray
可以是一维、二维或更高维度的数组,通过高效的内存布局和向量化操作,使得 NumPy 在处理大规模数据时具有很高的性能。
常用功能
- 数组创建:可以使用多种方式创建
ndarray
,如从 Python 列表转换、使用内置函数(如zeros
、ones
、arange
等)创建特定形状和值的数组。 - 数组索引和切片:类似于 Python 列表,
ndarray
支持通过索引和切片来访问和修改数组元素。同时,NumPy 还支持高级索引,如布尔索引和整数数组索引。 - 数组运算:支持元素级的算术运算(如加、减、乘、除)、矩阵运算(如矩阵乘法)以及各种数学函数(如三角函数、指数函数等)。这些运算都是基于向量化操作实现的,避免了使用显式的循环,从而提高了运算效率。
- 数组操作:包括数组的形状操作(如
reshape
、transpose
)、数组的拼接和分割(如concatenate
、split
)等。 - 统计分析:提供了许多用于统计分析的函数,如计算均值、中位数、标准差、方差等。
mport numpy as np
# 1. 数组创建
# 从Python列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
# 创建全零数组
zeros_arr = np.zeros((3, 3))
# 创建全一数组
ones_arr = np.ones((2, 4))
# 创建等差数列
arange_arr = np.arange(0, 10, 2)
# 2. 数组属性
print("arr2的形状:", arr2.shape)
print("arr2的维度:", arr2.ndim)
print("arr2的元素个数:", arr2.size)
print("arr2的数据类型:", arr2.dtype)
# 3. 数组索引和切片
# 访问一维数组元素
print("arr1的第一个元素:", arr1[0])
# 访问二维数组元素
print("arr2的第二行第三列元素:", arr2[1, 2])
# 一维数组切片
print("arr1的前三个元素:", arr1[:3])
# 二维数组切片
print("arr2的第一行所有元素:", arr2[0, :])
# 4. 数组运算
# 元素级加法
arr3 = arr1 + 2
# 元素级乘法
arr4 = arr1 * 3
# 两个数组相加
arr5 = arr1 + np.array([6, 7, 8, 9, 10])
# 矩阵乘法
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
matrix_product = np.dot(matrix1, matrix2)
# 5. 数组操作
# 改变数组形状
reshaped_arr = arr2.reshape(3, 2)
# 数组转置
transposed_arr = arr2.T
# 6. 统计分析
# 计算均值
mean_value = np.mean(arr1)
# 计算标准差
std_value = np.std(arr1)
print("元素级加法结果:", arr3)
print("矩阵乘法结果:", matrix_product)
print("改变形状后的数组:", reshaped_arr)
print("数组的均值:", mean_value)
print("数组的标准差:", std_value)
代码解释
- 数组创建:使用
np.array
从 Python 列表创建数组,使用np.zeros
、np.ones
、np.arange
等函数创建特定数组。 - 数组属性:通过
shape
、ndim
、size
、dtype
等属性获取数组的形状、维度、元素个数和数据类型。 - 数组索引和切片:使用索引和切片操作访问和修改数组元素。
- 数组运算:进行元素级的算术运算和矩阵乘法运算。
- 数组操作:使用
reshape
改变数组形状,使用T
进行数组转置。 - 统计分析:使用
np.mean
和np.std
计算数组的均值和标准差。