5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作
目录
前言
符号化运算也是数值运算中的一个主要的领域,今天我们来学习以下,python里强大的符号运算库---sympy。今天讲的是第一讲,sympy的操作。
对应于官网的:Basic Operations
https://docs.sympy.org/latest/tutorial/basic_operations.html
(一)符号的初始化与输出设置-symbol() symbols() latex()
1.作用:
在sympy里进行符号运算之前,必须先定义sympy的符号,这样sympy才能识别该符号。
.init_printing(use_latex=True)开启时,在jupyter运行时,输出的是LaTeX的格式
使用:latex()函数,同样返回LaTeX的格式。
2.操作:
(1)说明:
符号的初始化分为两种形式:
- 单个符号的初始化:x = sympy.Symbol('x')
- 多个符号的初始化:x,y=sympy.symbol("x y")
(2)源代码:
import sympy as sy
# 符号化变量
x = sy.Symbol('x')
y, z = sy.symbols('y z')
# 输出设置
sy.init_printing(use_latex=True)
# 输出结果
print("x:", type(x))
print("y:", type(y))
print(x**2+y+z)
print(sy.latex(x**2+y+z))
(3)输出效果

(二)替换符号-subs(old,new)
1.说明:
sub是Substitution的简称,也就是替换,其有两个作用:
语法是:expr.sub(old,new)
- 数值替换,用数值替换符号,进行带入计算。
- 符号替换,用一些符号替换符号。
2.源代码:
from sympy import *
# 符号化变量
x, y, z = symbols('x y z')
expr = x**2+1
# 数值替换
result = expr.subs(x, 2)
print("原式:", expr)
print("数值计算的结果:", result)
# 符号替换
new_expr = expr.subs(x, y+z)
print("符号替换的结果:", new_expr)
3.输出效果:

4.注意点:
(1)是否改变原表达式
subs()函数不改变原表达式,并且返回一个修改的表达式。
(2)替换多个表达式
当需要替换多个表达式时,可以在subs()里使用列表
如:subs([(x,2), (y, 3), (z, 4)])
表示:将x替换成2,y替换成3,z替换成4
(三)将字符串变为sympy的表达式-sympify()
1.说明:
不要混淆了sympify()函数与 simplify()函数,前者是转化,后者是简化。
2.源代码:
from sympy import *
string = "x**2+2*y + z/2"
# 转化
expr = sympify(string)
print("类型:", type(expr))
print("表达式:", expr)
3.输出效果:

(四)数值计算-evalf()
1.说明:
相当于python自带的eval()函数,只是进行的是float浮点数运算。
2.操作:
(1)对于数值表达式的运算
直接使用.evalf()函数
from sympy import *
expr = sqrt(8)
# 进行计算
result = expr.evalf()
print(result)

(2)对于符号表达式的运算
对于表达式常用的是:
.evalf(subs={x: 2.4})
from sympy import *
# 符号化
x = Symbol('x')
# 进行计算
expr = x**2+3
result = expr.evalf(subs={x: 2})
print(result)

(五)自定义表达式-lambdify()
1.说明:
该函数有点类似于lambda(),用于自己构造一个函数表达
2.源代码:
from sympy import *
import numpy as np
x = Symbol('x')
a = np.arange(10)
expr = x**2
# 构造自己的函数
f = lambdify(x, expr, "numpy")
print(f(a))
3.输出效果:

作者:Mark
日期:2019/03/15 周五
5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作的更多相关文章
- 4.2Python数据处理篇之Matplotlib系列(二)---plt.scatter()散点图
目录 目录 前言 (一)散点图的基础知识 (二)相关性的举例 ==1.正相关== ==1.负相关== ==1.不相关== (三)实战项目以一股票的分析 目录 前言 散点图是用于观测数据的相关性的,有正 ...
- 3.2Python数据处理篇之Numpy系列(二)--- ndarray数组的创建与变换
目录 (一)ndarray数组的创建 1.从列表以元组中创建: 2.使用函数创建: (二)ndarray数组的变换 1.维度的变换: 2.类型的变换: 目录: 1.ndarray数组的创建 2.nda ...
- 6.2Python数据处理篇之pandas学习系列(二)Series数据类型
目录 目录 (一)Series的组成 (二)Series的创建 1.从标量中创建Series数据 2.从列表中创建Series数据 3.从字典中创建Series数据 4.从ndarry中创建Serie ...
- 5.1Python数据处理篇之Sympy系列(一)---Sympy的大体认识
目录 目录 前言 目录 前言 sympy是python一个强大的数学符号运算第三方库,具体的功能请看下面操作 官网教程: https://docs.sympy.org/latest/tutorial/ ...
- 4.12Python数据处理篇之Matplotlib系列(十二)---绘图风格的介绍
目录 目录 前言 (一)不同风格 1.说明: 2.使用: 3.代码使用: (二)例子演示 1.dark_background 2.bmh 3.fivethirtyeight 4.ggplot 5.gr ...
- 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数
目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...
- 4.14Python数据处理篇之Matplotlib系列(十四)---动态图的绘制
目录 目录 前言 (一)需求分析 (二)随机数的动态图 1.思路分析: 2.源代码: 2.输出效果: 目录 前言 学习matplotlib已经到了尾声,没有必要再继续深究下去了,现今只是学了一些基础的 ...
- 4.13Python数据处理篇之Matplotlib系列(十三)---轴的设置
目录 目录 前言 (一)设置轴的范围 1.同时对于x,y轴设置 2.分别对与x,y轴的设置 (二)设置刻度的大小 1.普通的刻度设置 2.添加文本的刻度设置 3.主副刻度的设置 (三)设置轴的数据 1 ...
- 4.11Python数据处理篇之Matplotlib系列(十一)---图例,网格,背景的设置
目录 目录 前言 (一)图例legend 1.默认不带参数的图例 2.添加参数的图例 3.将图例移动到框外 (二)网格grid 1.说明 2.源代码: 3.输出效果 (三)背景axses 1.设置全局 ...
随机推荐
- Java核心技术及面试指南:视频列表
如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1 JDK和JRE和JVM的区别,安装Java开发环境 1.1.1 第2页 2 视频1.2 编写第一个HelloWorld程序 ...
- 近期编程总结(i think -1)
随着“四则运算题”的不断升级,功能实现起来越来越难,需要的知识也越来越多.实现过程中,需要不断地查阅相关资料和与其他人讨论的实现方法. 四则运算2的产生,的确耗费了自己很多的精力,不过反思一下,在不断 ...
- Asp.Net SignalR Hub类中的操作详解
Hub类中的操作 在服务端我们要通过Hub类做一系列操作,下面就说说我们都可以做什么操作 客户端的发送消息操作 调用所有的客户端的helloClient方法 Clients.All.helloClie ...
- 函数式编程之-bind函数
Bind函数 Bind函数在函数式编程中是如此重要,以至于函数式编程语言会为bind函数设计语法糖.另一个角度Bind函数非常难以理解,几乎很少有人能通过简单的描述说明白bind函数的由来及原理. 这 ...
- RabbitMQ消息队列(六)-消息任务分发与消息ACK确认机制(.Net Core版)
在前面一章介绍了在.Net Core中如何使用RabbitMQ,至此入门的的部分就完成了,我们内心中一定还有很多疑问:如果多个消费者消费同一个队列怎么办?如果这几个消费者分任务的权重不同怎么办?怎么把 ...
- github访问很慢解决方案
首先要解决的就是这个访问速度的问题: 获取Github相关网站的ip 访问https://www.ipaddress.com,拉下来,找到页面中下方的“IP Address Tools – Quick ...
- JDK源码分析(6)之 LinkedHashMap 相关
LinkedHashMap实质是HashMap+LinkedList,提供了顺序访问的功能:所以在看这篇博客之前最好先看一下我之前的两篇博客,HashMap 相关 和 LinkedList 相关: 一 ...
- Java多线程父子线程关系 多线程中篇(六)
有的时候对于Java多线程,我们会听到“父线程.子线程”的概念. 严格的说,Java中不存在实质上的父子关系 没有方法可以获取一个线程的父线程,也没有方法可以获取一个线程所有的子线程 子线程的消亡与父 ...
- Service Worker MDN英文笔记
前言: 以前学习基础知识的时候总看别人写的入门文章,但有时候还是一脸懵逼,直到自己用心阅读了MDN的英文文档才对基础知识的一些理论有了更深的理解,所以我在边阅读文档的时候边记录下帮助比较大的,也方便大 ...
- https 加密、http2.0、keep-alive
原文地址:https://ainyi.com/44 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议 ...