2016-07-15 4 views
1

scipy.linalg.logm(np.diag([-1.j, 1.j])) 라인은 scipy 0.17.1로 오류가 발생하는 반면 matlab과 동일한 호출 인 logm(diag([-i, i]))은 유효한 출력을 생성합니다. 이미 bugreport on github을 제출했습니다. 이제 해결 방법을 요청하기 위해 왔습니다. 거기에 어떤 구현을 파이썬에서 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

관련 문제