标签: sympy

Numpy:可能有更好的格式吗?

有没有办法在 Numpy 中获得更好的矩阵格式,例如类似于 Sage 中的 show() 或 Sympy 中的 init_printing() 获得的结果?

我正在研究 Craig Finch 写的关于 Sage 的书,在关于线性代数的章节中,很明显 Sage 的输出与 Numpy 的输出之间的质量和清晰度差异。有没有办法最终直接在 IPython 笔记本中提高 Numpy 输出质量?

只是为了澄清我的要求:我习惯了 Sage 笔记本,但想探索 Ipython 笔记本的新可能性。我特别想准备一些关于线性代数和Numpy的笔记本。但是 Numpy 的简单纯文本输出不是特别好或清晰(http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-2-Numpy.ipynb),我会喜欢某种排版风格,特别是矩阵(方括号、圆括号、行列式竖线等)。

python formatting numpy sympy ipython

2
推荐指数
1
解决办法
3829
查看次数

Sympy - 访问solve()解决方案的单个部分

我试图解一组方程:

from sympy import *
from sympy.solvers import *
a,b,c = symbols('a,b,c')

equations=[
    Eq(a*1**2+b*2+c,3),
    Eq(a*4**2+b*5+c,6),
    Eq(a*7**2+b*8+c,9),

]
solve(equations)
Run Code Online (Sandbox Code Playgroud)

效果很好...我会得到类似的输出

[{a: 1, c:-2, b:3}]
Run Code Online (Sandbox Code Playgroud)

但现在我想选择符号 c 的解决方案并使其可处理。我怎样才能做到这一点。我在文档中没有找到任何内容。

多谢!

python sympy

2
推荐指数
1
解决办法
2388
查看次数

同情心表现不佳

我在 Windows 8.1 (x64) 上使用 sympy 0.7.5(通过 pip 安装)和 Python 3.4.2。请考虑这个简短的程序:

import sympy
import time

start = time.time()
for i in range(100):
    sympy.Point(12345.0, 54321.0)
print('Elapsed (ms):', (time.time() - start) * 1000)
Run Code Online (Sandbox Code Playgroud)

我的机器大约需要22 秒才能执行此操作。我在这里缺少什么?

python floating-point sympy

2
推荐指数
1
解决办法
1264
查看次数

如何在 sympy 中在变量的下标上编写求和符号

我想为求和编写一个 sympy 符号,但求和的索引也显示为被加数中变量名称的下标。例如,

import numpy as np
import sympy
sympy.init_printing()

r = sympy.Symbol('r')

a = sympy.Matrix(sympy.symbols('a:4'))
rpowers = sympy.Matrix([r**i for i in range(len(a))])
long_expr = a.dot(rpowers)

n = sympy.Symbol('n')
a_n = sympy.Symbol('a_n')
short_expr = sympy.Sum(a_n * r**n, (n, 0, 3))
Run Code Online (Sandbox Code Playgroud)

long_exprshort_expr在数学上表示相同的事物。但是使用long_expr,我可以替换 的值a,然后将该表达式羔羊化为 numpy 函数:

coeffed_long_expr = long_expr.subs(zip(a, [-1, 3, 23, 8]))
func_long_expr = sympy.lambdify([r], coeffed_long_expr, 'numpy')
Run Code Online (Sandbox Code Playgroud)

我怎样才能做同样的事short_expr?或者short_expr在这种情况下仅对显示带有求和符号的表达式有用?我希望能够使用求和符号来显示,特别是对于大ns 。

python numpy sympy

2
推荐指数
1
解决办法
2420
查看次数

渲染 Sympy 矩阵时,Spyder 无法渲染乳胶

Python 3.5.0 |Anaconda 2.4.0 (x86_64) Python 4.0.0 Spyder 今天更新。在 Mac iBook OS 10.10.1 上运行

>>> M = Matrix([[1, 0, 1, 3], [2, 3, 4, 7], [-1, -3, -3, -4]])
>>> M
Run Code Online (Sandbox Code Playgroud)

在 Spyder 内部控制台中产生以下错误:

>>> /Users/webe077/anaconda/lib/python3.5/site-packages/nbformat/current.py:19: UserWarning: nbformat.current is deprecated.

- use nbformat for read/write/validate public API
- use nbformat.vX directly to composing notebooks of a particular version

  """)
ERROR:root:Failed to render latex: '$$\left ( \left[\begin{matrix}1 & 0 & 1 & 3\\0 & 1 & \frac{2}{3} & \frac{1}{3}\\0 & 0 …
Run Code Online (Sandbox Code Playgroud)

python sympy spyder

2
推荐指数
1
解决办法
2450
查看次数

如何在Python中将总和分成几个部分而不转换为字符串

假设我有一些表达

from sympy import *
a,b,c,x,y = symbols('a c b x y') 
eq=a*x + b*x*y + c*y**2
Run Code Online (Sandbox Code Playgroud)

需要分成一个包含单项式的数组。

我目前的解决方案是

parts = str(eq).split(' + ')
Run Code Online (Sandbox Code Playgroud)

然后,我对数组部分的每个元素使用 eval 函数,将其解释为表达式。

我可以做什么来将多元多项式拆分为单项式部分,而不先将表达式转换为字符串?

python sympy

2
推荐指数
1
解决办法
2871
查看次数

使用 Sympy 返回自动导数

我正在尝试构建一个类,其目标是将函数的导数f也作为函数返回。我读过 Sympy 并开始尝试使用这个包。

主要问题

假设我有一个只有一个参数的简单函数,如下所示:

def f1p(x):
    return x**2 + 5**x * 2*x + 1
Run Code Online (Sandbox Code Playgroud)

现在,我有一种方法可以确保函数只有一个参数,然后计算导数(仅作为表达式):

from sympy import *
import inspect
def get_derivative(fun):
    parameters=inspect.getargspec(f).args
    if(len(parameters)>1):
       raise ValueError('Function has more than one parameter.')
    fdiff=fun(Symbol(parameters[0])).diff()
    print(fdiff)
Run Code Online (Sandbox Code Playgroud)

假设它fdiff包含导函数的主要表达式,因此,我要解决的问题是返回一个函数以对其进行评估,例如:

f_deriv=get_derivative(f1p) #f_deriv is a callable function 
print(f_deriv(a)) #Prints derivative value of f1p in a
Run Code Online (Sandbox Code Playgroud)

注意:我尝试过return eval/exec(diff)但不是一个好主意,因为需要声明参数。我还尝试用以下内容包装表达式:

eval('def foo('+parameters[0]+'):\n\treturn '+diff)
Run Code Online (Sandbox Code Playgroud)

这仍然不是一个好主意。

扩展主要问题

假设现在我们在基本函数中使用(例如)对数,因此,我们以这种方式实现它

import math
def f1p(x):
    return x**2 + 5**x * 2*x + 1 + math.log(x)
Run Code Online (Sandbox Code Playgroud)

当我将上一个函数应用于此时,出现以下错误: …

python automation sympy derivative

2
推荐指数
1
解决办法
476
查看次数

将列表转换为序列以制作 sympy Polygon

我想从点列表中制作一个 sympy Polygon。文档说它需要一系列点。我不知道如何转换。

from sympy import Point2D, Polygon

# this works
p1 = Polygon(Point2D(0,0), Point2D(1,0), Point2D(1,1), Point2D(0,1))
print(p1.area)

# this fails at the Polygon call
points=[]
points.append(Point2D(0,0))
points.append(Point2D(0,1))
points.append(Point2D(1,1))
points.append(Point2D(1,0))
t = tuple(points)
p = Polygon(t)
Run Code Online (Sandbox Code Playgroud)

当它失败时,我得到这个

Traceback (most recent call last):
  File "t_polygon.py", line 14, in <module>
    p = Polygon(t)
  File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in __new__
    vertices = [Point(a, dim=2, **kwargs) for a in args]
  File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in <listcomp>
    vertices = [Point(a, dim=2, …
Run Code Online (Sandbox Code Playgroud)

python list sequence sympy

2
推荐指数
1
解决办法
1174
查看次数

在 sympy 中禁用自动简化

我想在 sympy 中禁用自动简化,例如求解x*y-x我想要的方程x/x而不是1

import sympy
from sympy.abc import x,y,z
expr = x*y-x
sympy.solve(expr,y)
=> 1 # i want unsimplified x/x instead of 1
Run Code Online (Sandbox Code Playgroud)

从 sympy 手册中,我找到了 UnevaluatedExpr 用于此目的,但它返回给定示例的空列表

from sympy import UnevaluatedExpr
expr1 = UnevaluatedExpr(x)*UnevaluatedExpr(y)-UnevaluatedExpr(x)
sympy.solve(expr1,y) 
=> []
Run Code Online (Sandbox Code Playgroud)

我的问题是

  • 给出的例子有什么问题?
  • 我怎样才能保持表达式不被评估/不被简化?

python sympy simplification

2
推荐指数
1
解决办法
1281
查看次数

如何检查 SymPy 表达式是否具有解析积分

我想在这里解决我的另一个问题所以只要没有积分的解析/符号解决方案,我就需要 sympy 返回错误。

例如,如果我尝试:

from sympy import *
init_printing(use_unicode=False, wrap_line=False, no_global=True)
x = Symbol('x')
integrate(1/cos(x**2), x)
Run Code Online (Sandbox Code Playgroud)

它只是 [漂亮] 打印积分本身

在此处输入图片说明

没有解决和/或给出无法解决的错误!

PS 我也在Reddit 上问过这个问题。

python symbolic-math sympy integral

2
推荐指数
1
解决办法
581
查看次数