2016-10-24 3 views
0

:가면 배열로 공급할 때 numpy sum과 mean 함수의 반환 유형이 다르게 작동하는 이유는 무엇입니까? 나는 다음과 같은 문제가 건너 한 파이썬 패키지 디버깅

>>> import numpy as np 
>>> import numpy.ma as ma 
>>> a=ma.array([1,2]) 
>>> np.mean(a) 
masked_array(data = 1.5, 
      mask = False, 
     fill_value = 1e+20) 

: 나는 마스크 배열 기능을 평균 NumPy와 공급 병적 인 경우

는 반환 형식은 마스크 배열 나도 같은 마스크 배열 합 기능을 공급하는 경우, 반환 형식은 부동 동안이 동작은 의도 된 경우

>>> np.sum(a) 
3 

는 아무도 생각을 가지고 있는가 만약 그렇다면, 추론 뒤에 무엇인가?

파이썬 버전 2.7.12 및 파이썬 3.5.2로 테스트되었습니다. ma.mean 문서에 주어진 예와

답변

0

모두 스칼라에게

In [1217]: b = np.ma.array([1,2,3], mask=[False, False, True]) 
In [1218]: b.mean() 
Out[1218]: 1.5 
In [1219]: b.sum() 
Out[1219]: 3 

귀하의 경우가 다르다을 반환 마스크 스칼라 False 아닌 배열 : '정말 shouldn

In [1220]: a=np.ma.array([1,2,3]) 
In [1221]: a 
Out[1221]: 
masked_array(data = [1 2 3], 
      mask = False, 
     fill_value = 999999) 
In [1222]: a.mean() 
Out[1222]: 
masked_array(data = 2.0, 
      mask = False, 
     fill_value = 999999) 
In [1223]: a.sum() 
Out[1223]: 6 

차이를 만들어라. 나는 이것에 대한 논의를보고 막연하게 기억하고있다. 나는 그것이 다른 문제인지 또는 버그 문제인지를 기억하지 못합니다. 또한 수정되었을 수도 있습니다. 우리는 수색을해야 할 것입니다. 내 NumPy와 버전은 '1.11.0'

이 문제는 마스크 mean의의 시작에 선입니다 :

if self._mask is nomask: 
    result = super(MaskedArray, self).mean(axis=axis, dtype=dtype) 

nomaskFalse 스칼라가; 그래서 당신의 a 경우에는 그 마스크에 특별한 일을하지 않고도 보통 numpy 평균을 수행하려고 시도합니다. 하지만 입력과 동일한 하위 클래스의 결과를 반환하려고합니다.

a 마스크를 배열로 변경하면 문제가 해결됩니다.

In [1247]: a.mask=[False,False,False] 

==============

확인, 중복 내가 bugissue을 발견

numpy.ma (masked) array mean method has inconsitent return type

눈에 잘 띄는 곳에 사이드 바에서 숨어 지난 7 월, 그러나 패치는 없습니다.