首页 文章

扩展python函数以处理sympy符号

提问于
浏览
0

给定一个为数值编写的现有函数,Sympy是否有建议的方法来扩展它处理符号?例如:

import numpy as np
def foo(ax, ay, az):
  A = np.matrix([[1. ,    ax,          0],
                 [0  , 1./ay,          0],
                 [0  ,     0, np.cos(az)]])
  return A
foo(1, 2, 3)

# We want this to work too:
import sympy as spy
ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
foo(ax, ay, az)

如何扩展 foo() 以处理交感符号 ax, ay, az 并因此返回符号矩阵 A ?是否有任何公用事业可以帮助解决这个问题?

1 回答

  • 0

    遗憾的是,你无法处理numpy函数中的sympy符号 . 一个肮脏的解决方案是检查变量的类型并决定使用哪个函数 .

    import numpy as np
    import sympy as spy
    
    def foo(ax, ay, az):
      A = np.matrix([[1.,    ax, 0                                                    ],
                     [0 , 1./ay, 0                                                    ],
                     [0 , 0    , spy.cos(az) if type(az) is spy.Symbol else np.cos(az)]])
      return A
    
    print foo(1, 2, 3)
    
    ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
    print foo(ax, ay, az)
    >>>
    [[ 1.         1.         0.       ]
     [ 0.         0.5        0.       ]
     [ 0.         0.        -0.9899925]]
    [[1.0 ax 0]
     [0 1.0/ay 0]
     [0 0 cos(az)]]
    

相关问题