극심한 학습 기계의 Numpy에서 양방향 배열로 작업하고 있습니다. 내 배열 중 하나 인 H는 무작위 적이며 그 pseudoinverse를 계산하려고합니다. scipy.linalg.pinv2를 사용하면 모든 것이 원활하게 실행됩니다. 그러나 scipy.linalg.pinv를 사용하면 때로는 (시간의 30-40 %) 문제가 발생합니다.Numpy/Scipy pinv 및 pinv2는 다르게 동작합니다.
pinv2를 사용하는 이유는 "높이"와 "와이드"배열에서 pinv2가 더 나은 성능을 보였기 때문입니다 (여기서는 http://vene.ro/blog/inverses-pseudoinverses-numerical-issues-speed-symmetry.html).
H가 열 j가 모두 1이면, pinv (H)는 행 j에서 큰 계수를가집니다. 그런 경우 np.dot (pinv (H), Y)에 몇 개의 나노 값 (Y는 작은 정수의 배열)이 포함되어 있기 때문에 이것이 문제가됩니다.
이제는 선형 대수와 수치 계산이 아니기 때문에 두 가지 함수의 버그 또는 정밀도와 관련된 속성인지 이해할 수 있습니다. 이 질문에 답해 주시면 버그 리포트를 제출할 수 있습니다. 솔직히 말해서 나는 무엇을 써야할지 모를 것입니다.
배열을 np.savetxt (fn, a, '% .2e', ';')로 저장했습니다. 찾으려면 https://dl.dropboxusercontent.com/u/48242012/example.tar.gz을 참조하십시오.
도움을 주시면 감사하겠습니다. 제공된 파일에서 pinv (H) .csv에서 행 14, 33, 55, 56 및 99는 큰 값을 가지며 pinv2 (H)에서는 동일한 행이 더 적절한 값을 갖음을 볼 수 있습니다.
귀하의 도움에 감사드립니다.
정수 대신 부동 소수점 숫자로 전환 하시겠습니까? –
왜 결과가 바뀌 었는지 설명 할 수 있습니까? – marcotama
yr 데이터를 보지 않았지만 값이 32 비트보다 큰 경우 데이터를 NaN 영역으로 강제 전송할 수 있습니다. –