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库函数