scipy

scipy

  • 是什么
  • 常用方法

是什么

scipy是Python语言的一个开源数值计算库,主要目的是为科学、工程、计算等领域提供有用的数学算法和函数,包括线性代数、优化、信号处理、傅里叶变换、统计函数等。它是Python科学计算环境的重要组成部分,通常与NumPy和Matplotlib等库一起使用。

常用方法

  1. 线性代数:scipy.linalg
    • solve:解线性方程组
    • det:计算矩阵的行列式
    • eig:计算矩阵的特征值和特征向量
    • inv:计算矩阵的逆矩阵
    • svd:计算矩阵的奇异值分解
import numpy as np
from scipy import linalg# 创建一个2x2的矩阵
A = np.array([[1, 2], [3, 4]])# 计算矩阵的行列式
det_A = linalg.det(A)
print("det(A) =", det_A)# 计算矩阵的逆矩阵
inv_A = linalg.inv(A)
print("inv(A) =\n", inv_A)# 解线性方程组 Ax = b
b = np.array([5, 6])
x = linalg.solve(A, b)
print("x =", x)# 计算矩阵的奇异值分解
U, s, V = linalg.svd(A)
print("U =\n", U)
print("s =", s)
print("V =\n", V)

结果

det(A) = -2.0
inv(A) =[[-2.   1. ][ 1.5 -0.5]]
x = [-4.   4.5]
U =[[-0.40455358 -0.9145143 ][-0.9145143   0.40455358]]
s = [5.4649857  0.36596619]
V =[[-0.57604844 -0.81741556][ 0.81741556 -0.57604844]]
  1. 优化:scipy.optimize
    • minimize:对一个目标函数进行最小化
    • root:求解方程组
    • curve_fit:拟合数据曲线
    • minimize_scalar:对一个一元函数进行最小化
import numpy as np
from scipy import optimize# 定义需要最小化的函数
def f(x):return x ** 2 - 4 * x + 3# 使用Brent算法求取函数的最小值
result = optimize.minimize_scalar(f, method="brent")
print("minimum value: ", result.fun)
print("minimum point: ", result.x)

结果

minimum value:  1.0
minimum point:  2.0
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt# 构造正弦函数
def sin_func(x, a, b, c, d):return a * np.sin(b * x + c) + d# 构造数据
x_data = np.linspace(0, 2 * np.pi, 50)
y_data = sin_func(x_data, 3, 1.5, np.pi / 3, 2) + 0.5 * np.random.normal(size=len(x_data))# 使用curve_fit拟合数据
popt, pcov = curve_fit(sin_func, x_data, y_data)# 绘制原始数据和拟合结果
plt.scatter(x_data, y_data, label='Original data')
plt.plot(x_data, sin_func(x_data, *popt), 'r-', label='Fit result

在这里插入图片描述

from scipy.optimize import root
import numpy as np# 定义方程
def func(x):return x**2 + 2*np.sin(x)# 求解方程的根
sol = root(func, 0.3)# 输出结果
print(sol.x)  # [0.]
from scipy.optimize import root
import numpy as np# 定义方程组
def func(x):return [x[0]**2 + x[1]**2 - 1, x[0] + x[1] - np.sqrt(2)]# 求解方程组的根
sol = root(func, [1, 1])# 输出结果
print(sol.x)
# [0.70710679 0.70710678]
from scipy.optimize import minimize
import numpy as np# 定义目标函数
def rosen(x):"""Rosenbrock函数"""return sum(100.0 * (x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)# 定义约束条件
cons = ({'type': 'ineq', 'fun': lambda x:  x[0] - 1},{'type': 'ineq', 'fun': lambda x: -x[0] - 1},{'type': 'ineq', 'fun': lambda x:  x[1] - 1},{'type': 'ineq', 'fun': lambda x: -x[1] - 1})# 求解最小值
x0 = np.array([0, 0])
res = minimize(rosen, x0, method='SLSQP', constraints=cons)# 输出结果
print(res)
"""message: Positive directional derivative for linesearchsuccess: Falsestatus: 8fun: 0.9999999999965967x: [ 1.702e-12  1.692e-14]nit: 8jac: [-2.000e+00  1.490e-06]nfev: 42njev: 4
"""
  1. 插值:scipy.interpolate
    • interp1d:一维插值
    • interp2d:二维插值
    • griddata:多维插值
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建一些随机数据点
x = np.linspace(0, 10, 10)
y = np.sin(x)# 使用线性插值生成更多的数据点
f_linear = interp1d(x, y, kind='linear')
x_new = np.linspace(0, 10, 30)
y_linear = f_linear(x_new)# 使用样条插值生成更多的数据点
f_cubic = interp1d(x, y, kind='cubic')
y_cubic = f_cubic(x_new)# 绘制原始数据和插值曲线
plt.plot(x, y, 'o', label='原始数据点')
plt.plot(x_new, y_linear, '-', label='线性插值')
plt.plot(x_new, y_cubic, '--', label='样条插值')
plt.legend()
plt.show()

在这里插入图片描述

  1. 信号处理:scipy.signal
    • fft:快速傅里叶变换
    • convolve:卷积运算
    • resample:重新采样
    • spectrogram:信号的谱分析
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt# 生成一个带噪声的信号
t = np.linspace(0, 10, 1000)
y = np.sin(t) + np.random.normal(0, 0.1, t.shape)# 设计一个低通滤波器并应用于信号
b, a = signal.butter(4, 0.1, 'low')  # 4 表示滤波器阶数,0.1 表示截止频率
y_filtered = signal.filtfilt(b, a, y) # Filtfilt 函数应用前向和反向滤波器,可以减少滤波器导致的相位延迟# 绘制原始信号和滤波后的信号
plt.figure(figsize=(6, 6))
plt.subplot(2, 1, 1)
plt.plot(t, y, label='原始信号')
plt.xlabel('时间')
plt.ylabel('幅度')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(t, y_filtered, label='滤波后的信号')
plt.xlabel('时间')
plt.ylabel('幅度')
plt.legend()plt.show()

在这里插入图片描述

  1. 统计:scipy.stats
    • ttest_ind:t检验
    • pearsonr:计算Pearson相关系数
    • chi2_contingency:卡方检验
    • f_oneway:方差分析
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt# 生成 1000 个随机变量
x = np.random.normal(0, 1, 1000)# 计算随机变量的均值和方差
mean = stats.mean(x)
variance = stats.variation(x)# 计算随机变量的概率密度函数(PDF)并绘制出来
pdf_x = np.linspace(-4, 4, 1000)
pdf_y = stats.norm.pdf(pdf_x, loc=mean, scale=np.sqrt(variance))plt.plot(pdf_x, pdf_y, label='PDF')
plt.xlabel('随机变量')
plt.ylabel('概率密度')
plt.legend()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年GopherChina大会-核心PPT资料下载

一、峰会简介 自 Go 语言诞生以来,中国便是其应用最早和最广的国家之一,根据 Jetbrains 在 2021 年初做的调查报告,总体来说目前大概有 110 万专业的开发者 选择 Go 作为其主要开发语言。就其全球分布而言, 居住在亚洲的开发者最多&#xff…

go学习之goroutine和channel

文章目录 一、goroutine(协程)1.goroutine入门2.goroutine基本介绍-1.进程和线程说明-2.程序、进程和线程的关系示意图-3.Go协程和Go主线程 3.案例说明4.小结5.MPG模式基本介绍6.设置Golang运行的CPU数7.协程并发(并行)资源竞争的问题8.全局互斥锁解决资…

MySQL 8 update语句更新数据表里边的数据

数据重新补充 这里使用alter table Bookbought.bookuser add userage INT after userphone;为用户表bookuser在userphone列后边添加一个类型为INT的新列userage。 使用alter table Bookbought.bookuser add sex varchar(6) after userage ;为用户表bookuser在userage 列后边添…

Oracle-数据库连接数异常上涨问题分析

问题: 用户的数据库在某个时间段出现连接数异常上涨问题,时间持续5分钟左右,并且问题期间应用无法正常连接请求数据库 从连接数的监控上可以看到数据库平常峰值不到100个连接,在问题时间段突然上涨到400以上 问题分析:…

unity | 动画模块之循环滚动选项框

一、作者的话 评论区有人问,有没有竖排循环轮播选项框,我就写了一个 二、效果动画 如果不是你们想要的,就省的你们继续往下看了 三、制作思路 把移动分成里面的方块,还有背景(父物体),方块自…

网络模拟与网络仿真

目录 一、概念界定 二、模拟(simulation)与仿真(emulation) 2.1 模拟(simulation) 2.2 仿真(emulation) 2.3 区分 三、网络模拟与网络仿真 3.1 网络模拟 3.2 网络仿真 3.…

SpringBoot之logback 在Linux系统上启动的时候,设置日志按日期分割并设置指定时间自动清除日志

一、在src/main/resources/下创建logback-spring.xml文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 日志存放路径 --><property name"log.path" value"/home/xmmc/logs" /><!-- 日志…

《智能决策技术及应用》笔记

团支部有读书会活动可以报销&#xff0c;我挑选买了一本《智能决策技术及应用》&#xff08;刘丽兰 等著&#xff09;&#xff0c;这本书分三篇&#xff0c;第三篇实际应用是在智能制造产业上就对我没啥大用。 内容其实都是主流的&#xff0c;但是编排上是有独特组合的&#x…

【算法】算法题-20231206

这里写目录标题 一、非自身以外数字的乘积二、最大数三、奇数排序 一、非自身以外数字的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀…

VA05销售报表屏幕增强

业务需求&#xff1a;在VA05报表界面增强两个字段&#xff08;BELNR1/BELNR2&#xff09;. 第一步&#xff1a;扩展VA05相关表结构 由于新增的字段是按照销售订单行维度展示的&#xff0c;所以本篇加在VBAP表里&#xff08;不扩展表字段&#xff0c;直接写增强&#xff0c;会…

融云 Global IM UIKit,灵活易用的即时通讯组件设计思路和最佳实践

&#xff08;全网都在找的《社交泛娱乐出海作战地图》&#xff0c;点击获取&#x1f446;&#xff09; 融云近期推出的 Global IM UIKit&#xff0c;支持开发者高效满足海外用户交互体验需求&#xff0c;且保留了相当的产品张力赋予开发者更多自由和灵活性&#xff0c;是实现全…

朝花夕拾华山平台流水账

2022年8月25日&#xff0c;我加入了诚迈科技&#xff08;南京&#xff09;&#xff0c;加入了华山平台。 跟我一起入职平台的还有三个小伙伴&#xff1a;小帅、小阳、小甘。 小帅能力很强&#xff0c;前后端都会&#xff0c;入职各种考试工具人。 小阳毕业没多久&#xff0c;一…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

ESP32-Web-Server编程-在网页中插入图片

ESP32-Web-Server编程-在网页中插入图片 概述 图胜与言&#xff0c;在网页端显示含义清晰的图片&#xff0c;可以使得内容更容易理解。 需求及功能解析 本节演示在 ESP32 Web 服务器上插入若干图片。在插入图片时还可以对图片设置一个超链接&#xff0c;用户点击该图片时&a…

本地ip查询介绍(包含公开免费的API接口)-本地ip查询API接口

本机ip和网络ip的区别 网络地址和主机地址 IP 地址&#xff08;Internet Protocol Address&#xff09;&#xff0c;即互联网协议地址&#xff0c;是一种用于唯一标识互联网上设备的地址。它包括网络地址和主机地址两部分&#xff0c;通常用“IPv4”或“IPv6”表示。 本机 …

使用axios处理Cookie、Session和Token(jwt)

在Vue中&#xff0c;可以使用JavaScript来处理Cookie、Session和Token。我们还是以登录为例介绍它们的使用 Cookie&#xff1a; 在Vue中&#xff0c;可以使用JavaScript内置的document.cookie来读取和设置Cookie。在登录过程中&#xff0c;可以将用户的身份信息存储在Cookie中…

Web API

JavaScript中有些API可能使用率比较低 Blob API Blob API 用于处理二进制数据&#xff0c;可以方便地将数据转换为Blob对象或从Blob对象读取数据。 // 创建一个Blob对象 const myBlob new Blob(["Hello, world!"], { type: "text/plain" }); // 读取Bl…

Oracle merge into语句(merge into Statement)

在Oracle中&#xff0c;常规的DML语句只能完成单一功能&#xff0c;&#xff0c;例如insert/delete/update只能三选一&#xff0c;而merge into语句可以同时对一张表进行更新/插入/删除。 目录 一、基本语法 二、用法示例 2.1 同时更新和插入 2.2 where子句 2.3 delete子句 2.4…

Gitee项目推荐-HasChat

最近由于使用的局域网通信工具总是出问题&#xff0c;就在考虑有没有好的替代品。搜索了一番&#xff0c;发现这个还不错&#xff1a; HasChat: 一款极简聊天应用&#xff0c;比较完整&#xff0c;略好看 页面简洁&#xff0c;功能也比较齐全&#xff0c; 感兴趣的小伙伴可以…

Java常识

初识Java 01 特点 面向对象的 跨平台的 02 核心机制 java虚拟机&#xff08;JVM&#xff09;。 java垃圾回收&#xff08;GC&#xff09;&#xff1a;c语言中由程序员负责回收无用的内存链&#xff0c;java垃圾回收在java程序运行的过程中自动进行。 03 命名原则(一) 由26个…