scipy.linalg.logm(np.diag([-1.j, 1.j]))产生scipy 0.17.1错误,而对matlab的相同调用logm(diag([-i, i]))产生有效输出。我已经提交了bugreport on github,现在我在这里寻求解决方法。 Python中有logm的任何实现可以执行logm(np.diag([-1.j, 1.j]))吗?

编辑:错误已在scipy 0.18.0rc2中修复,因此该线程已关闭。

最佳答案

我对计算不够了解,无法理解错误。但是它有一些事情要做被零除-可能是真实的。

用较小的值替换数组的零实部有效:

In [40]: linalg.logm(np.diag([1e-16-1.j,1e-16+1.j]))
Out[40]:
array([[  5.00000000e-33-1.57079633j,   0.00000000e+00+0.j        ],
       [  0.00000000e+00+0.j        ,   5.00000000e-33+1.57079633j]])


因此,小的实部可以用

In [47]: linalg.logm(np.diag([1e-16-1.j,1e-16+1.j])).imag*1j
Out[47]:
array([[-0.-1.57079633j,  0.+0.j        ],
       [ 0.+0.j        ,  0.+1.57079633j]])

07-24 09:52