2016-07-13 3 views
4

플로트 값을 가진 행렬이 있고 열과 행의 요약을 얻으려고합니다. 이 행렬은 대칭입니다.파이썬 numpy 행렬의 결과가 일치하지 않습니다.

>>> np.sum(n2[1,:]) #summing second row 
0.80822400592582844 
>>> np.sum(n2[:,1]) #summing second col 
0.80822400592582844 
>>> np.sum(n2, axis=0)[1] 
0.80822400592582899 
>>> np.sum(n2, axis=1)[1] 
0.80822400592582844 

다른 결과를 제공합니다. 왜?

+1

약간의 관련없는 참고 사항 : 첫 번째 행 (또는 열)은 인덱스 0이고 1이 아닙니다. –

답변

2

숫자 numpydouble이며 소수점 이하 16 자리의 정확도를 사용합니다. 16 자리에서 차이가 발생하고 나머지 자리는 동일하게 보입니다. 이 정확도가 필요하지 않은 경우 반올림 함수 np.around()을 사용하거나 실제로는 np.longdouble 유형을 사용하여 더 높은 정확도를 얻을 수 있습니다. 일부 NumPy와 기능을 저는 믿습니다 긴 루타를 허용하지 않으며, 추가 숫자를 절단, 이중에 쫓겨 것

>>> print np.finfo(np.double).precision 
>>> 15 

:

당신은 np.finfo를 사용하여 유형의 정확성을 확인할 수 있습니다. Numpy precision

+2

이는 이유입니다. 완전성을 위해 부동 소수점 수의 합계는 합계의 순서에 따라 달라지며 행렬 행 또는 행렬 열의 합계가 다른 순서로 발생할 수도 있습니다 (소스 코드를 살펴 봐야합니다. 확실히하다). –

관련 문제