NumPy 是 Python 中用于科学计算的基础库之一,提供了高效的多维数组对象(ndarray
)以及一系列用于操作这些数组的函数。它是许多其他科学计算库(如 Pandas、SciPy、TensorFlow)的基础。以下是 NumPy 的基础知识,包括数组的创建、操作、索引、切片、计算等内容。
首先,你需要安装 NumPy。如果你还没有安装,可以通过以下命令进行安装:
pip install numpy
NumPy 提供了多种方法来创建数组,包括从列表、元组创建,从文件读取数据创建,以及使用内置函数创建数组。
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
# 从元组创建二维数组
arr2 = np.array([(1, 2, 3), (4, 5, 6)])
print(arr2)
NumPy 提供了许多函数来创建特定形状和内容的数组。
# 创建全零数组
arr_zeros = np.zeros((3, 3))
print(arr_zeros)
# 创建全一数组
arr_ones = np.ones((2, 4))
print(arr_ones)
# 创建单位矩阵(对角线为 1 的方阵)
arr_eye = np.eye(3)
print(arr_eye)
# 创建等差数组
arr_arange = np.arange(0, 10, 2)
print(arr_arange)
# 创建线性等分数组
arr_linspace = np.linspace(0, 1, 5)
print(arr_linspace)
# 创建随机数组
arr_random = np.random.rand(3, 3)
print(arr_random)
NumPy 数组的基本操作包括数组的形状变换、元素访问、切片和布尔索引。
# 查看数组形状
print(arr2.shape)
# 改变数组形状
arr_reshaped = arr2.reshape(3, 2)
print(arr_reshaped)
# 转置数组
arr_transposed = arr2.T
print(arr_transposed)
# 展平数组
arr_flattened = arr2.flatten()
print(arr_flattened)
NumPy 数组支持与 Python 列表类似的索引和切片操作。
# 访问单个元素
print(arr1[2])
# 切片操作
print(arr1[1:4]) # 输出 [2, 3, 4]
# 多维数组索引
print(arr2[1, 2]) # 输出 6
# 多维数组切片
print(arr2[0:2, 1:3]) # 输出 [[2, 3], [5, 6]]
通过布尔数组进行索引可以筛选出满足条件的元素。
# 布尔条件筛选
print(arr1[arr1 > 3]) # 输出 [4, 5]
NumPy 提供了丰富的数值计算功能,包括数学函数、统计函数、线性代数操作等。
NumPy 允许对数组进行元素级的加、减、乘、除等运算。
arr_a = np.array([1, 2, 3])
arr_b = np.array([4, 5, 6])
# 元素加法
arr_sum = arr_a + arr_b
print(arr_sum) # 输出 [5, 7, 9]
# 元素乘法
arr_prod = arr_a * arr_b
print(arr_prod) # 输出 [4, 10, 18]
# 数组与标量运算
arr_scaled = arr_a * 2
print(arr_scaled) # 输出 [2, 4, 6]
NumPy 提供了一系列数学函数来对数组进行操作。
# 求和
arr_sum = np.sum(arr_a)
print(arr_sum) # 输出 6
# 平均值
arr_mean = np.mean(arr_a)
print(arr_mean) # 输出 2.0
# 标准差
arr_std = np.std(arr_a)
print(arr_std) # 输出 0.816
# 正弦函数
arr_sin = np.sin(arr_a)
print(arr_sin) # 输出 [0.841, 0.909, 0.141]
# 自然对数
arr_log = np.log(arr_a)
print(arr_log) # 输出 [0., 0.693, 1.099]
NumPy 还支持常见的线性代数操作,如矩阵乘法、逆矩阵等。
# 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
matrix_prod = np.dot(matrix_a, matrix_b)
print(matrix_prod) # 输出 [[19, 22], [43, 50]]
# 计算逆矩阵
matrix_inv = np.linalg.inv(matrix_a)
print(matrix_inv) # 输出 [[-2. , 1. ], [ 1.5, -0.5]]
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(matrix_a)
print(eig_vals) # 输出特征值
print(eig_vecs) # 输出特征向量
NumPy 提供了方便的函数来从文件中读取数据或将数组保存到文件中。
# 保存数组到文件
np.save('array.npy', arr_a)
# 从文件加载数组
loaded_array = np.load('array.npy')
print(loaded_array)
# 保存为文本文件
np.savetxt('array.txt', arr_a)
# 从文本文件加载数组
loaded_array_txt = np.loadtxt('array.txt')
print(loaded_array_txt)
NumPy 的广播机制允许不同形状的数组在进行算术运算时自动扩展成相同的形状。广播可以在不显式复制数据的情况下,让计算更加高效。
arr_c = np.array([1, 2, 3])
arr_d = np.array([[1], [2], [3]])
# 广播机制下的加法
result = arr_c + arr_d
print(result)
# 输出:
# [[2, 3, 4],
# [3, 4, 5],
# [4, 5, 6]]
NumPy 是一个功能强大的库,为数值计算和数据处理提供了高效的工具。掌握 NumPy 的基本操作、数组创建、数值计算、线性代数操作等内容,将为你进行科学计算和数据分析打下坚实的基础。在数据科学、机器学习等领域,NumPy 是一个必不可少的工具。