使用 sympy 矩阵或 sympy 符号的 numpy 数组,如何取元素对数?
例如,如果我有:
m=sympy.Matrix(sympy.symbols('a b c d'))
Run Code Online (Sandbox Code Playgroud)
然后np.abs(m)工作正常,但np.log(m)不起作用(“AttributeError:log”)。
有什么解决办法吗?
我尝试创建一个带有带索引变量的 Sum 的 sympy 表达式,如前面的解释here 但是,我不能对这个表达式进行 Lambdify 并给出一个数组来计算总和。这是不可能的吗?
使用 numpy,我可以从带有整数列表的数组中选择任意一组项目:
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a[[0,2]]
array([1, 3])
Run Code Online (Sandbox Code Playgroud)
这似乎不适用于 sympy 矩阵,因为代码:
>>> import sympy as sp
>>> b = sp.Matrix([1,2,3])
>>> b[[0,2]]
Run Code Online (Sandbox Code Playgroud)
结果出现错误消息:
**Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/sympy/matrices/dense.py", line 94, in __getitem__
return self._mat[a2idx(key)]
File "/usr/lib/python2.7/dist-packages/sympy/matrices/matrices.py", line 4120, in a2idx
raise IndexError("Invalid index a[%r]" % (j, ))
IndexError: Invalid index a[[0, 2]]
Run Code Online (Sandbox Code Playgroud)
我的问题是是否有办法在 sympy 中做到这一点?
给定方程 |x - 5| + |y| = 5,如何使用 SymPy 解决它?
如果我使用solve()和Abs()的组合,它会给我这个错误
当参数不是实数或虚数时求解 Abs(x - 5)
但是,在会议开始时我写下了
x, y, z = symbols('x, y, z', RealNumber = True)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢!
python equation sympy computer-algebra-systems equation-solving
我有一个需要替换的多个变量的表达式.问题是要替换的一些表达式还包含需要替换的变量实例.
from sympy import *
from sympy.abs import a,b, x,y
expr = a + b
replace = [[a, x+y], [b, 2*a]]
expr.subs(replace) # 2*a + x + y, I want 3*x + 3*y
Run Code Online (Sandbox Code Playgroud)
如果替换列表的顺序正确,它将按顺序应用每个替换,但在我的实际应用程序中,我不知道哪个顺序是合适的:
expr.subs(reversed(replace)) # 3*x + 3*y
Run Code Online (Sandbox Code Playgroud)
我可以通过应用替代n次要么强制替代expr或者replace,但这似乎浪费计算:
result = expr
for _ in replace:
# Applying n times
result = result.subs(replace)
Run Code Online (Sandbox Code Playgroud)
我希望有一个recursive选项subs,但这似乎不存在.有更好的选择吗?
这两种方法var和pythonsymbol中的sympy模块有什么区别吗?因为两者的工作方式相同。我用谷歌搜索,我没有找到差异的详细解释。它们真的是完全相同的东西,还是其中一个实际上正在使用另一个或什么?
我有以下一组命令来做一个定积分
n [2]: from sympy import *
init_printing()
x,L = symbols('x, L')
n = symbols('n', integer = True)
exp = sin((n+Rational(1,2))*pi*x/L)**2
integrate(exp, (x,0,L))
Run Code Online (Sandbox Code Playgroud)
这些命令的结果如下所示:
第一个结果意味着 n=-1/2 这意味着 n 不是整数。如果在如上所示的操作中不考虑它,则为符号提供整数属性有什么意义?如果 n 是整数,我如何强制 sympy 认识到分段结果的第一部分是不可能的?
是否可以从 sympy 库中的 matrix_multiply_elementwise 处理两个以上矩阵?或者还有其他方法可以将两个矩阵按元素相乘吗?
ps 在 numpy 中它很简单,但由于我需要高精度计算,我决定使用 sympy
在“sympy”中表达以下内容的最合适方式是什么:
对样本 'x[i]' 的总和,其中 'i' 从具体的 0 到符号的 'N'。'x[i]' 本身应该是象征性的,即总是作为变量出现。
目标是在线性方程组中使用这些表达式。
示例(平凡最小二乘近似):
给定一组样本 (x[i], y[i]),它们应该位于由 'y = m*x + a' 给出的一条线上。即,估计线由“m”和“a”确定。样本和估计线之间的误差可以由下式给出
error(m, a) = sum((m * x[i] + a - y[i])**2, start_i=0, end_i=N)
Run Code Online (Sandbox Code Playgroud)
现在,在导数 'd/dm error(m,a)' 和 'd/da error(m,a)' 中搜索零转换提供了最小距离。我怎样才能找到 sympy 的解决方案?
我正在做一些矩阵运算,有时涉及其条目具有恒定值的矩阵。
但是由于某种原因,即使结果很简单,我也无法通过矩阵运算将结果合并为一个多项式。例如,考虑以下因素:
from sympy.matrices import *
import sympy
x= sympy.symbol.symbols('x')
Poly_matrix = sympy.Matrix([[sympy.Poly(x, x)],[sympy.Poly(x, x)]])
constant_matrix = sympy.Matrix([[0,1]])
constant_matrix_poly = constant_matrix.applyfunc(lambda val: sympy.Poly(val, x))
# this doesn't combine them
result1 = constant_matrix * Poly_matrix
print result1
>>>> Matrix([[Poly(0, x, domain='ZZ') + Poly(x, x, domain='ZZ')]])
# even THIS doesn't combine them when I convert the constants to Polynomials
result = constant_matrix_poly * Poly_matrix
print result
>>>> Matrix([[Poly(0, x, domain='ZZ') + Poly(x, x, domain='ZZ')]])
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试提取表达式并将结果转换为其他多项式时,出现以下错误:
# This is where the trouble starts …Run Code Online (Sandbox Code Playgroud)