首页 文章

如何在同情中采用矩阵的元素对数?

提问于
浏览
4

使用同情矩阵或numpy数组的同情符号,如何采用元素对数?

例如,如果我有:

m=sympy.Matrix(sympy.symbols('a b c d'))

然后 np.abs(m) 工作正常,但 np.log(m) 不起作用("AttributeError: log") .

有解决方案吗

2 回答

  • 1

    使用 Matrix.applyfunc

    In [6]: M = sympy.Matrix(sympy.symbols('a b c d'))
    
    In [7]: M.applyfunc(sympy.log)
    Out[7]:
    ⎡log(a)⎤
    ⎢      ⎥
    ⎢log(b)⎥
    ⎢      ⎥
    ⎢log(c)⎥
    ⎢      ⎥
    ⎣log(d)⎦
    

    您不能使用 np.log ,因为它会执行数字日志,但您需要符号版本,即 sympy.log .

  • 3

    如果你想要一个元素对数,并且你的矩阵都是单列的,你应该只能使用列表推导:

    >>> m = sympy.Matrix(sympy.symbols('a b c d'))
    >>> logm = sympy.Matrix([sympy.log(x) for x in m])
    >>> logm
    Matrix([
    [log(a)],
    [log(b)],
    [log(c)],
    [log(d)]])
    

    这有点难看,但你可以把它包装在一个功能中以方便,例如:

    >>> def sp_log(m):
        return sympy.Matrix([sympy.log(x) for x in m])
    
    >>> sp_log(m)
    Matrix([
    [log(a)],
    [log(b)],
    [log(c)],
    [log(d)]])
    

相关问题