Python精选200Tips:111-115

有了汽车,还要什么自行车

运行系统:macOS Sonoma 14.6.1
Python编译器:PyCharm 2024.1.4 (Community Edition)
Python版本:3.12

往期链接:

1-5 6-10 11-20 21-30 31-40 41-50
51-60:函数 61-70:类 71-80:编程范式及设计模式
81-90:Python编码规范 91-100:Python自带常用模块-1
101-105:Python自带模块-2 106-110:Python自带模块-3

本文只介绍每个包主要做什么及一些比较经典的示例。对于包的进一步学习,推荐参考对应包的官方文档。

111 numpy–数值计算和数组处理

本文示例的numpy版本为2.1.1,官方文档
NumPy(Numerical Python)是一个强大的开源库,用于科学计算。它提供了支持大型多维数组和矩阵的对象,以及与这些数组和矩阵进行快速操作的工具。NumPy 是许多其他科学计算库(如 SciPy、Pandas、Matplotlib 等)的基础。NumPy 是 Python 中一个重要的科学计算库,具有以下几个关键特征:

  1. 高效的多维数组对象
    NumPy 提供了一个强大的 N 维数组对象 ndarray,支持高效的存储和操作大规模数据。
import numpy as np

# 创建一个 3D 数组
array_3d = np.random.rand(2, 3, 4)
print("3D Array:\n", array_3d)
  1. 广播功能
    支持不同形状的数组之间的操作,允许自动扩展数组的维度,使得数组运算更加灵活和简便。
import numpy as np

# 创建一个 2D 数组和一个 1D 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
array_1d = np.array([1, 2, 3])

# 通过广播进行相加
result = array_2d + array_1d
print("Broadcasting Result:\n", result)
  1. 丰富的数学函数库
    提供了大量的数学函数,包括线性代数、傅里叶变换、随机数生成等,方便进行复杂的数学计算。
import numpy as np

# 计算正弦和余弦
x = np.linspace(0, 2 * np.pi, 100)
sin_values = np.sin(x)
cos_values = np.cos(x)

print("Sine Values:\n", sin_values)
print("Cosine Values:\n", cos_values)
  1. 高性能
    NumPy 的操作是用 C 语言实现的,优化了性能,尤其在处理大规模数据时,速度远超 Python 自带的列表。
import numpy as np
import time

# 使用 NumPy 计算大数组的平方
size = 10**7
array = np.random.rand(size)

# 计时
start_time = time.time()
squared = array ** 2
end_time = time.time()

print("Time taken for NumPy operation:", end_time - start_time)
  1. 切片和索引
    支持强大的数组切片和索引功能,允许对数组的任意部分进行访问和操作。
import numpy as np

# 创建一个 5x5 的数组
array_2d = np.arange(25).reshape(5, 5)

# 切片选取特定行和列
selected_elements = array_2d[1:4, 1:4]
print("Selected Elements:\n", selected_elements)
  1. 与其他库的兼容性
    NumPy 是许多其他科学计算库(如 SciPy、Pandas、Matplotlib 等)的基础,提供了数据处理和数值计算的核心功能。
import numpy as np
import matplotlib.pyplot as plt

# 创建正弦波数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 使用 Matplotlib 绘制图形
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
  1. 线性代数支持
    提供了专门的线性代数模块,支持矩阵运算、特征值计算、奇异值分解等操作。
import numpy as np

# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
C = np.dot(A, B)
print("Matrix Multiplication:\n", C)

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)
  1. 内存效率
    NumPy 数组使用固定类型的元素,内存使用效率高,适合存储大量数据。
import numpy as np

# 创建一个包含整数的 NumPy 数组
int_array = np.array([1, 2, 3, 4, 5], dtype=np.int32)
print("Array Data Type:", int_array.dtype)

# 创建一个包含浮点数的 NumPy 数组
float_array = np.array([1, 2, 3, 4, 5], dtype=np.float64)
print("Array Data Type:", float_array.dtype)
  1. 方便的数据处理
    提供了丰富的数组操作方法,如排序、过滤、聚合等,便于数据分析。
import numpy as np

# 创建一个随机数组
data = np.random.rand(10)

# 过滤出大于 0.5 的元素
filtered_data = data[data > 0.5]
print("Filtered Data (greater than 0.5):", filtered_data)

应用领域
(1)数值计算
(2)数据分析
(3)机器学习中的数据预处理
(4)图像处理
(5)科学研究中的数据处理

示例

广播机制:计算每个点到给定点的距离
import numpy as np

# 创建一个 2D 数组,表示点的坐标
points = np.array([[1, 2], [3, 4], [5, 6]])

# 创建一个给定点
given_point = np.array([2, 3])

# 计算每个点到给定点的距离
distances = np.sqrt(np.sum((points - given_point) ** 2, axis=1))

print("Points:\n", points)
print("Given Point:", given_point)
print("Distances to Given Point:", distances)
数值计算:二维傅里叶变换
import numpy as np

# 创建一个示例二维数组(图像)
# 例如,一个 8x8 的简单图像
image = np.array([[0, 1, 2, 3, 4, 5, 6, 7],
                  [8, 9, 10, 11, 12, 13, 14, 15],
                  [16, 17, 18, 19, 20, 21, 22, 23],
                  [24, 25, 26, 27, 28, 29, 30, 31],
                  [32, 33, 34, 35, 36, 37, 38, 39],
                  [40, 41, 42, 43, 44, 45, 46, 47],
                  [48, 49, 50, 51, 52, 53, 54, 55],
                  [56, 57, 58, 59, 60, 61, 62, 63]])

# 计算二维傅里叶变换
fft_result = np.fft.fft2(image)

# 将傅里叶变换结果移到中心
fft_shifted = np.fft.fftshift(fft_result)

# 计算幅度谱
magnitude_spectrum = np.log(np.abs(fft_shifted) + 1)

# 输出幅度谱的形状和部分值
print("Magnitude Spectrum Shape:", magnitude_spectrum.shape)
print("Magnitude Spectrum (first 10 values):", magnitude_spectrum.flatten()[:10])
数值降维处理:主成分分析 (PCA)
import numpy as np

# 创建一个示例数据集
data = np.array([[2.5, 2.4],
                 [0.5, 0.7],
                 [2.2, 2.9],
                 [1.9, 2.2],
                 [3.1, 3.0],
                 [2.3, 2.7],
                 [2, 1.6],
                 [1, 1.1],
                 [1.5, 1.6],
                 [1.1, 0.9]])

# 数据中心化
mean = np.mean(data, axis=0)
centered_data = data - mean

# 计算协方差矩阵
cov_matrix = np.cov(centered_data, rowvar=False)

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

# 按特征值降序排列特征向量
sorted_indices = np.argsort(eigenvalues)[::-1]
sorted_eigenvectors = eigenvectors[:, sorted_indices]

# 选择前两个主成分
pca_data = centered_data.dot(sorted_eigenvectors[:, :2])

print("PCA Result (first 5 values):\n", pca_data[:5])
数值筛选:复杂条件筛选
import numpy as np

# 创建一个示例数据集
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9],
                 [10, 11, 12],
                 [13, 14, 15]])

# 筛选条件:第二列大于5且第三列小于12
condition = (data[:, 1] > 5) & (data[:, 2] < 12)
filtered_data = data[condition]

print("Filtered Data (second column > 5 and third column < 12):\n", filtered_data)

112 pandas–表格数据读写和分析处理

本文示例的pandas版本为2.2.2,官方文档
Pandas 是一个强大的数据分析库,广泛用于数据处理和分析。以下是 Pandas 的主要特征及对应的示例。

  1. 数据结构

Pandas 提供了两种主要的数据结构:Series 和 DataFrame。

  • Series:一维数组,带有标签(索引)。
  • DataFrame:二维表格,类似于 Excel表格,包含多列。
import pandas as pd

# 创建 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print("Series:\n", s)

# 创建 DataFrame
data = {
   
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 27, 22],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print("DataFrame:\n", df)
  1. 数据读取与写入

Pandas 支持多种格式的数据读取和写入,包括 CSV、Excel、SQL 数据库等。

import pandas as pd

# 读取 CSV 文件
df_from_csv = pd.read_csv('data.csv')
print("DataFrame from CSV:\n", df_from_csv)

# 将 DataFrame 写入 CSV 文件
df.to_csv('output.csv', index=False)
  1. 数据筛选与索引

Pandas 提供强大的数据筛选和索引功能,可以快速访问和修改数据。

import pandas as pd

# 从excel文件读取数据
df = pd.read_excel('data.xlsx')

# 筛选年龄大于25的行
filtered_df = df[df['Age'] > 25]
print("Filtered DataFrame (Age > 25):\n", filtered_df)
  1. 数据清理与处理

Pandas 提供了多种方法来处理缺失值、重复值等数据清理任务。

import pandas as pd

# 创建包含缺失值的 DataFrame
data_with_nan = {
   
    'Name': ['Alice', 'Bob', None],
    'Age': [24, None, 22]
}
df_nan = pd.DataFrame(data_with_nan)

# 填充缺失值
df_nan['Age'].fillna(df_nan['Age'].mean(), inplace=True)
print("DataFrame after filling missing values:\n", df_nan)
  1. 数据分组与聚合

Pandas 支持按特定列分组,并进行聚合操作,如计算均值、总和等。

import pandas as pd

# 假设有一个包含城市信息的 DataFrame
data = {
   
    'Name': ['Alice'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AnFany

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值