当前位置: 首页 > article >正文

人工智能学习(二)之Python 科学计算库

一、引言

在当今的科技领域,数据处理和科学计算无处不在。Python 作为一门功能强大且简单易学的编程语言,凭借其丰富的科学计算库,成为了众多科研人员、数据分析师和工程师的首选工具。这些科学计算库涵盖了数值计算、数据分析、优化算法、统计建模等多个方面,能够帮助我们高效地解决各种复杂的科学计算问题。本文将带你快速入门 Python 科学计算库,深入了解它们的核心功能和使用方法,让你在数据的海洋中畅游无阻。

二、NumPy 库

(一)NumPy 简介

NumPy(Numerical Python)是 Python 科学计算的基础库,它提供了一个强大的 N 维数组对象(ndarray),以及一系列用于数组操作的函数和工具。NumPy 的数组对象具有高效的存储和计算性能,能够大大提高数值计算的效率。

(二)ndarray 数组的创建与基本操作

创建数组:可以通过numpy.array函数将 Python 列表转换为 ndarray 数组。

import numpy as np

# 将列表转换为数组

arr = np.array([1, 2, 3, 4, 5])

print(arr)

也可以使用numpy.arange函数创建一个等差数列数组。

# 创建等差数列数组

arr = np.arange(0, 10, 2) # 从0开始,到10结束(不包含10),步长为2

print(arr)

数组的基本属性:ndarray 数组具有一些重要的属性,如shape(形状)、dtype(数据类型)等。

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.shape) # 输出(2, 3),表示二维数组,第一维有2个元素,第二维有3个元素

print(arr.dtype) # 输出元素的数据类型,如int64

数组索引与切片:和 Python 列表类似,ndarray 数组也支持索引和切片操作。

arr = np.array([1, 2, 3, 4, 5])

print(arr[0]) # 访问第一个元素,输出1

print(arr[1:3]) # 切片,获取第二个和第三个元素,输出[2 3]

# 二维数组的索引和切片

arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr_2d[1, 2]) # 访问第二行第三列的元素,输出6

print(arr_2d[0:2, 1:]) # 切片,获取前两行,第二列及以后的元素

(三)数组的数学运算

基本算术运算:NumPy 数组可以直接进行加、减、乘、除等算术运算,这些运算会对数组的每个元素进行操作。

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

print(arr1 + arr2) # 对应元素相加,输出[5 7 9]

print(arr1 * arr2) # 对应元素相乘,输出[ 4 10 18]

广播机制:当对形状不同的数组进行运算时,NumPy 会尝试使用广播机制来匹配数组的形状。

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

arr2 = np.array([10, 20, 30])

print(arr1 + arr2) # 广播机制使arr2与arr1形状匹配后相加

(四)常用的 NumPy 函数

数学函数:NumPy 提供了大量的数学函数,如np.sin、np.cos、np.exp等,这些函数可以直接应用于数组。

arr = np.array([0, np.pi/2, np.pi])

print(np.sin(arr)) # 计算正弦值,输出[0. 1. 0.]

统计函数:例如np.mean(均值)、np.sum(求和)、np.max(最大值)等。

arr = np.array([1, 2, 3, 4, 5])

print(np.mean(arr)) # 计算均值,输出3.0

print(np.sum(arr)) # 计算总和,输出15

三、SciPy 库

(一)SciPy 简介

SciPy(Scientific Python)是基于 NumPy 的一个科学计算库,它提供了更为高级的数学算法和工具,涵盖了优化、插值、积分、线性代数、信号处理等多个领域。

(二)优化算法

一元函数优化:scipy.optimize.minimize_scalar函数可以用于寻找一元函数的最小值。

from scipy.optimize import minimize_scalar

import numpy as np

def func(x):

return x**2 + 2*x + 1

result = minimize_scalar(func)

print(result.x) # 输出函数的最小值点,接近-1.0

多元函数优化:scipy.optimize.minimize函数可以处理多元函数的优化问题。

from scipy.optimize import minimize

import numpy as np

def rosen(x):

return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)

x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])

res = minimize(rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})

print(res.x) # 输出优化后的变量值

(三)插值与拟合

插值:scipy.interpolate.interp1d函数可以进行一维插值。

from scipy.interpolate import interp1d

import numpy as np

import matplotlib.pyplot as plt

x = np.array([0, 1, 2, 3])

y = np.array([1, 3, 2, 4])

f = interp1d(x, y)

xnew = np.linspace(0, 3, 50)

ynew = f(xnew)

plt.plot(x, y, 'o', xnew, ynew, '-')

plt.show()

曲线拟合:scipy.optimize.curve_fit函数用于将数据拟合到指定的函数模型。

from scipy.optimize import curve_fit

import numpy as np

import matplotlib.pyplot as plt

def func(x, a, b, c):

return a * np.exp(-b * x) + c

xdata = np.linspace(0, 4, 50)

y = func(xdata, 2.5, 1.3, 0.5)

ydata = y + 0.2 * np.random.normal(size=len(xdata))

p0 = [1, 1, 1]

popt, pcov = curve_fit(func, xdata, ydata, p0)

print(popt) # 输出拟合得到的参数值

(四)积分与微分

数值积分:scipy.integrate.quad函数可以计算定积分。


from scipy.integrate import quad

import numpy as np

def integrand(x):

return x**2

result, error = quad(integrand, 0, 1)

print(result) # 输出积分结果,接近1/3

数值微分:scipy.misc.derivative函数可以计算函数的数值微分。

from scipy.misc import derivative

import numpy as np

def func(x):

return x**3

result = derivative(func, 1.0, dx=1e-6)

print(result) # 输出函数在x=1处的导数,接近3.0

四、Pandas 库

(一)Pandas 简介

Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

(二)Series 和 DataFrame 对象

Series:是一种一维带标签数组,由一组数据和与之对应的索引组成。

import pandas as pd

data = [10, 20, 30, 40]

index = ['a', 'b', 'c', 'd']

s = pd.Series(data, index=index)

print(s)

DataFrame:是二维的表格型数据结构,由多个 Series 组成,可以看作是一个由列组成的字典,每列都是一个 Series,且所有列共享同一索引。

data = {

'Name': ['Alice', 'Bob', 'Charlie'],

'Age': [25, 30, 28],

'City': ['New York', 'London', 'Paris']

}

df = pd.DataFrame(data)

print(df)

(三)数据读取与写入

读取数据:Pandas 可以方便地读取各种格式的文件,如 CSV、Excel、SQL 等。

# 读取CSV文件

df = pd.read_csv('data.csv')

print(df.head()) # 查看前5行数据

写入数据:可以将 DataFrame 数据保存为 CSV、Excel 等格式。

df.to_csv('new_data.csv', index=False) # 保存为CSV文件,不保存索引

(四)数据清洗与预处理

处理缺失值:可以使用dropna方法删除含有缺失值的行或列,也可以使用fillna方法填充缺失值。

import pandas as pd

import numpy as np

data = {

'A': [1, np.nan, 3],

'B': [4, 5, np.nan],

'C': [7, 8, 9]

}

df = pd.DataFrame(data)

# 删除含有缺失值的行

df = df.dropna()

print(df)

# 填充缺失值

df.fillna(0, inplace=True)

print(df)

处理重复值:duplicated方法用于检测重复行,drop_duplicates方法用于删除重复行。

data = {

'A': [1, 2, 2, 3],

'B': [4, 5, 5, 6]

}

df = pd.DataFrame(data)

# 检测重复行

duplicates = df.duplicated()

print(duplicates)

# 删除重复行

df = df.drop_duplicates()

print(df)

(五)数据筛选与过滤

基于条件筛选:可以通过布尔索引对数据进行筛选。

data = {

'Name': ['Alice', 'Bob', 'Charlie', 'David'],

'Age': [25, 30, 28, 35],

'Salary': [5000, 6000, 5500, 7000]

}

df = pd.DataFrame(data)

# 筛选年龄大于30岁的记录

filtered_df = df[df['Age'] > 30]

print(filtered_df)

多条件筛选:使用逻辑运算符(&、|、~)进行多条件组合筛选。

# 筛选年龄大于30岁且工资大于6000的记录

filtered_df = df[(df['Age'] > 30) & (df['Salary'] > 6000)]

print(filtered_df)

五、Matplotlib 库

(一)Matplotlib 简介

Matplotlib 是 Python 中最常用的绘图库之一,它提供了丰富的绘图函数和工具,能够创建各种类型的静态、动态和交互式可视化图表,如折线图、散点图、柱状图、饼图等。

(二)基本绘图

绘制折线图:使用matplotlib.pyplot.plot函数。

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(0, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.xlabel('X轴')

plt.ylabel('Y轴')

plt.title('正弦函数')

plt.show()

绘制散点图:使用matplotlib.pyplot.scatter函数。

x = np.random.randn(100)

y = np.random.randn(100)

plt.scatter(x, y)

plt.show()

(三)多子图绘制

可以使用matplotlib.pyplot.subplot函数创建多个子图。

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(0, 10, 100)

y1 = np.sin(x)

y2 = np.cos(x)

plt.subplot(2, 1, 1)

plt.plot(x, y1)

plt.title('正弦函数')

plt.subplot(2, 1, 2)

plt.plot(x, y2)

plt.title('余弦函数')

plt.tight_layout()

plt.show()

(四)图表定制

设置颜色、线条样式等:在绘图函数中可以通过参数设置颜色、线条样式等。

x = np.linspace(0, 10, 100)

y = np.sin(x)

plt.plot(x, y, color='red', linestyle='--', marker='o')

plt.show()

添加图例:使用matplotlib.pyplot.legend函数添加图例。

x = np.linspace(0, 10, 100)

y1 = np.sin(x)

y2 = np.cos(x)

plt.plot(x, y1, label='Sin')

plt.plot(x, y2, label='Cos')

plt.legend()

plt.show()

六、总结与展望

通过本文的介绍,我们对 Python 中几个重要的科学计算库有了较为全面的了解,包括 NumPy 的数组操作、SciPy 的高级算法、Pandas 的数据处理以及 Matplotlib 的绘图功能。这些库在各自的领域都发挥着重要作用,并且相互配合,能够帮助我们完成从数据处理、分析到可视化的整个流程。

在未来的学习和实践中,你可以进一步深入研究这些库的高级功能和应用场景,如使用 NumPy 进行大规模矩阵运算、利用 SciPy 解决复杂的科学问题、借助 Pandas 进行更复杂的数据挖掘和分析,以及通过 Matplotlib 创建更精美的可视化图表。同时,随着 Python 生态系统的不断发展,还会有更多优秀的科学计算库和工具出现,持续关注并学习这些新技术,将为你的科研和工作带来更多的便利和创新。希望本文能成为你探索 Python 科学计算世界的一把钥匙,开启你在数据科学领域的精彩之旅。


http://www.kler.cn/a/515191.html

相关文章:

  • Transformer详解:Attention机制原理
  • c#配置config文件
  • 鸿蒙参考文档和问题记录
  • MySQL可直接使用的查询表的列信息
  • SSM开发(二) MyBatis简介
  • OGG 19C 集成模式启用DDL复制
  • SSM开发(二) MyBatis两种SQL配置方式及其对比
  • 三篇物联网漏洞挖掘综述
  • 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开
  • 软件测试 —— Postman初识
  • 最新-CentOS 7安装1 Panel Linux 服务器运维管理面板
  • JS学习之JavaScript模块化规范进化论
  • “模板”格式化发布新创诗(为《诗意 2 0 2 5》贡献力量)
  • 2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?
  • 【论文速读】| 评估并提高大语言模型生成的安全攻击探测器的鲁棒性
  • 【网络协议】RFC1350-TFTP协议
  • Java设计模式 十三 代理模式 (Proxy Pattern)
  • SQLmap 注入-03 获得用户信息
  • “深入浅出”系列之音视频开发:(3)音视频开发的学习路线和必备知识
  • Nginx 反向代理与负载均衡配置实践
  • Qt —— 控件属性
  • CentOS 7.9(linux) 设置 MySQL 8.0.30 开机启动详解
  • 【esp32-uniapp小程序】uniapp小程序篇02——Hbuilder利用git连接远程仓库
  • VUE之路由Props、replace、编程式路由导航、重定向
  • 【Django开发】django美多商城项目完整开发4.0第14篇:Docker使用,1. 在Ubuntu中安装Docker【附
  • 开源AI崛起:新模型逼近商业巨头