NumPy
在浩瀚的Python编程世界中,有一个强大的库如星辰般璀璨,它是数据科学家、机器学习工程师乃至量化金融分析师手中的利器——NumPy,它以其高效的数据处理能力和便捷的矩阵运算机制,在科研与工程领域中占据着举足轻重的地位。
一、NumPy初识:基石的力量
NumPy(Numerical Python)是Python中最核心的科学计算库之一,提供了一系列高级数学函数,以及对多维数组和矩阵的强大支持。它的基础数据结构numpy.ndarray
为海量数据的存储和操作提供了极高的效率,并且无缝对接其他深度学习框架,如TensorFlow、PyTorch等,奠定了Python在数据分析与科学计算领域的基础地位。
二、NumPy功能:领略高效魅力
-
快速创建和操作数组:通过简单的API,我们可以轻松创建各种类型的数组,进行元素级操作、统计分析、排序、索引切片等任务,大大提升了开发效率。
-
ndarray对象:NumPy的核心是一个名为
numpy.ndarray
的N维数组对象,它支持各种数据类型,并且高效地存储和操作同构数据集合。 -
高效的数组运算:NumPy中的数组支持快速的元素级数学运算、逻辑运算以及广播机制,能够以接近C语言的速度进行大规模数据处理。
-
矩阵运算:提供对矩阵的各种操作,如加减乘除、转置、求逆、解线性方程组、特征值分解、奇异值分解等。
-
数组索引与切片:类似于Python原生列表,但更加灵活,支持高级索引和花式索引。
-
统计函数:包含一系列统计学相关函数,例如求和、平均、中位数、标准差、最大值、最小值等。
-
排序和筛选:可以对数组进行排序,同时支持条件筛选操作。
-
形状变换:允许改变数组的维度和大小,包括reshape、flatten、squeeze、expand_dims等操作。
-
文件I/O:支持从磁盘读写多种格式的数据,如二进制、文本或图像文件。
-
随机数生成:内置了多个分布的随机数生成器,便于模拟和概率统计实验。
三、NumPy实战:计算最强大脑
创建数组
arr = np.array([1, 2, 3, 4, 5])
数组运算
result = arr1 + arr2
数学函数
result = np.sin(arr)
统计功能
mean = np.mean(arr)
随机数生成
random_arr = np.random.rand(5)
形状操作
reshaped_arr = arr.reshape(1, 4)
索引和切片
sub_arr = arr[2:4]
线性代数运算
result = np.dot(matrix1, matrix2)
数组拼接
concatenated_arr = np.concatenate((arr1, arr2))
数组重复
repeated_arr = np.repeat(arr, 3)
数组排序
sorted_arr = np.sort(arr)
布尔索引
bool_indexing_arr = arr[arr > 3]
数组转置
transposed_arr = arr.T
数组填充
filled_arr = np.full((3, 3), 5)
数组切割
split_arr = np.split(arr, 3)
实例1
import numpy as np# 创建一个2D数组(矩阵)
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)# 对数组进行转置操作
transpose = matrix.T
print(transpose)# 计算矩阵的行和列的总和
row_sums = np.sum(matrix, axis=1)
col_sums = np.sum(matrix, axis=0)
print(row_sums, col_sums)
实例2
import numpy as np # 创建一个NumPy数组
arr = np.array([5, 2, 8, 1, 9]) # 对数组进行排序
sorted_arr = np.sort(arr)
print("排序后的数组:", sorted_arr) # 获取排序后数组的索引
index = np.argsort(arr)
print("排序后数组的索引:", index)
实例3
import numpy as np# 创建一串随机数并计算统计指标
data = np.random.randn(1000) # 创建一个标准正态分布的随机数组
mean = np.mean(data) # 计算平均值
median = np.median(data) # 计算中位数
std_dev = np.std(data) # 计算标准差
print(f"Mean: {mean}")
print(f"Median: {median}")
print(f"Standard Deviation: {std_dev}")
实例4
import numpy as np# 创建系数矩阵和常数向量
A = np.array([[2, 1], [1, 3]])
b = np.array([8, 6])# 使用numpy.linalg.solve求解Ax=b
solution = np.linalg.solve(A, b)
print(solution)
实例5
import numpy as np# 创建两个NumPy矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]]) # 进行矩阵加法、减法和乘法运算
C = A + B
D = A - B
E = np.dot(A, B) print("矩阵加法结果:\n", C)
print("矩阵减法结果:\n", D)
print("矩阵乘法结果:\n", E)
实例6
from PIL import Image
import numpy as np# 加载图片为numpy数组
img = Image.open("image.jpg")
img_array = np.array(img)# 图像灰度化
gray_img = np.dot(img_array[...,:3], [0.299, 0.587, 0.114])
gray_img = gray_img.astype(np.uint8)# 将灰度图保存回文件
Image.fromarray(gray_img).save("gray_image.jpg")
实例7
np.random.rand(): 返回一个在 [0, 1) 之间的随机浮点数。
np.random.randint(low, high, size): 返回一个指定范围内的随机整数数组。
np.random.randn(d0, d1, ..., dn): 返回一个或多个标准正态分布的随机数数组。
np.random.random(size): 返回一个随机浮点数数组,其值在 [0, 1) 之间。
np.random.choice(a, size, replace=True, p=None): 从数组 a 中随机选择元素,或者使用概率 p 进行选择。
np.random.shuffle(x): 将数组 x 的元素顺序随机打乱。
np.random.permutation(x): 返回数组 x 的随机排列# 除了这些与标准库并不多的,另外还有近30个各种抽取样本的np.random库函数