行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]])