2016-07-15 1 views
1

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.linalg.logmは、matlabがエラーを生成します

EDIT:エラーはscipy 0.18.0rc2で修正されているため、このスレッドは閉じられています。

答えて

1

エラーを理解するための計算が不十分です。しかし、それはおそらく実際の部分では0で除算を行う何かを持っています。小さな値を持つ配列のゼロ実数部の交換

作品:

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]]) 
+0

で除去することができ、ありがとうございました。私の編集で述べたように、エラーは新しいscipyリリース候補で修正されていますが、回避策は問題ありません。 – HeinzKurt

関連する問題