首页 文章

scipy的cdist与Sympy符号不兼容

提问于
浏览
1

我今天意识到,矢量中的sympy矩阵符号(对于协方差矩阵中的多个部分元素导数)在优化.minimize过程中与scipy的cdist不兼容,因为它假定在进行函数调用时实际使用数字(公平)足够) .

它首先遇到的问题是表达式无法转换为float,因为它包含sympy符号

TypeError: can't convert expression to a float

接下来是一个很长的重复列表:

During handling of the above exception, another exception occurred: 
SystemError: <built-in function hasattr> returned a result with an error set

是否存在通过sympy符号利用cdist和替换的内置方式,或者这是实现可以处理符号的cdist的自定义实现的唯一选择?这并不重要,但我正在使用的cdist方法是欧几里得平方 .

谢谢 .

2 回答

  • 1

    正如您所发现的,scipy.distance.cdist不处理任意对象 . 你需要自己实现欧几里德规范 .

  • 1

    您可以通过首先将其转换为显式矩阵对象,然后使用norm方法来获得SymPy矩阵表达式的范数 .

    In [13]: A = MatrixSymbol("A", 1, 3)
    
    In [14]: A.as_explicit().norm()
    Out[14]:
       __________________________
      ╱      2        2        2
    ╲╱  │A₀₀│  + │A₀₁│  + │A₀₂│
    

相关问题