SymPy用dot()lambdify

尼科·施洛默(NicoSchlömer)

取一个碰巧被命名为的未定义函数dot,并将其作为以下内容的一部分lambdify

import numpy
import sympy


class dot(sympy.Function):
    pass

x = sympy.Symbol('x')

a = sympy.Matrix([1, 0, 0])
f = sympy.lambdify(x, dot(a.T, x))

x = numpy.array([3, 2, 1])
print(f(x))

惊喜:这实际上有效!

显然,该字符串"dot"以某种方式被提取并由点积的实现代替。有人知道吗?

以上结果为[3]但是,我想得到标量3(如何)可以修改f()以实现该目标?

巴库留

我不是sympy用户,但是引用其文档lambdify说:

如果用户没有另外指定,SymPy函数将尽可能用python-mathnumpy(如果可用)或mpmath函数替换-完全按此顺序。要更改此行为,可以使用“模块”自变量。它接受:

  • 字符串“ math”,“ mpmath”,“ numpy”,“ numexpr”,“ sympy”
  • 任何模块(例如数学)
  • 将sympy函数的名称映射到任意函数的字典
  • 包含上述参数混合的列表,具有较高优先级的条目将首先出现。

因此,似乎如果您已python-math安装它将使用该版本,如果未numpy安装,则将使用numpy的版本,否则mpmat,然后说明如何修改此行为。

在您的情况下,只需提供一个modules值,值是一个字典,该字典将名称映射dot到您想要返回标量的函数。


我的意思是一个例子:

>>> import numpy as np
>>> import sympy
>>> class dot(sympy.Function): pass
... 
>>> x = sympy.Symbol('x')
>>> a = sympy.Matrix([1,0,0])
>>> f = sympy.lambdify(x, dot(a.T, x), modules=[{'dot': lambda x, y: np.dot(x, y)[0]}, 'numpy'])
>>> y = np.array([3,2,1])
>>> print(f(y))
3
>>> print(type(f(y)))
<class 'numpy.int64'>

如您所见,通过处理modules参数可以实现所需的功能。我在这里的实现绝对是幼稚的,但是您可以将其概括为:

>>> def my_dot(x, y):
...     res = np.dot(x, y)
...     if res.ndim == 1 and res.size == 1:
...         return res[0]
...     return res

此函数检查法线的结果是否dot为标量,如果是,则返回普通标量,否则返回与相同的结果np.dot

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Sympy用numexpr lambdify ImmutableDenseMatrix

来自分类Dev

Sympy Lambdify与数组输入

来自分类Dev

SymPy lambdify引发OverflowError:数学范围错误

来自分类Dev

设置sympy lambdify参数的默认值

来自分类Dev

在numpy mesgrid上评估sympy lambdify的结果

来自分类Dev

sympy lambdify与元组中的函数参数?

来自分类Dev

sympy lambdify:如何提供更多功能(NCDF,NPDF等)

来自分类Dev

Python:SymPy lambdify Abs与NumPy一起使用

来自分类Dev

如何使Sympy lambdify(ed)函数接受数组输入?

来自分类Dev

分段函数和numpy模块的sympy.lambdify错误

来自分类Dev

Sympy-Lambdify-挖掘名称到虚拟变量

来自分类Dev

SymPy:使用2-D输入进行lambdify

来自分类Dev

在Sympy中隐式linsolve()然后进行lambdify

来自分类Dev

sympy lambdify:如何提供更多功能(NCDF,NPDF等)

来自分类Dev

sympy:Lambdify 不转换 sqrt 表达式

来自分类Dev

用SymPy绘图

来自分类Dev

用sympy反转排列

来自分类Dev

Sympy Lambdify在Mayavi中获得2D方程的3D图

来自分类Dev

Sympy:lambdify使得对数组的操作总会导致数组,也对于常量?

来自分类Dev

使用Sympy lambdify函数实例化贝塞尔函数时出错

来自分类Dev

如何使用带有Max函数的sympy.lambdify替代numpy.maximum而不是numpy.amax?

来自分类Dev

用任意参数替换sympy函数

来自分类Dev

用SymPy解方程的两边

来自分类Dev

用Sympy计算泰勒级数的多元函数

来自分类Dev

用python / sympy解决RC电路

来自分类Dev

用Python Sympy解决方程组

来自分类Dev

用Sympy计算泰勒级数的多元函数

来自分类Dev

用SymPy查找符号矩阵的逆

来自分类Dev

用Graphviz和Dot指向边缘