항등 테스트는 혼란을 만들 수 있습니다.
가
In [19]: 0 == m_pt0
Out[19]:
masked_array(data = [False -- False True False False False False],
mask = [False True False False False False False False],
fill_value = True)
마스크 된 배열과 .data
.mask
속성이 결과는 다른 마스크 배열이다.
In [20]: _.data
Out[20]: array([False, True, False, True, False, False, False, False], dtype=bool)
np.where
는 2 True
을보고하고, 함수의 np.ma
버전을 사용하는 것이 좋습니다 수
In [23]: np.where(0 == m_pt0)
Out[23]: (array([1, 3], dtype=int32),)
In [24]: np.where((0 == m_pt0).data)
Out[24]: (array([1, 3], dtype=int32),)
반환 : 인식 MA하지 numpy
기능은 바로이 .data
볼
In [25]: np.ma.where(0 == m_pt0)
Out[25]: (array([3], dtype=int32),)
np.source(np.ma.where)
코드를 보면 알 수 있습니다.
if missing == 2:
return filled(condition, 0).nonzero()
(plus lots of code for the 3 argument use)
filled
는 않습니다 :
In [27]: np.ma.filled((0 == m_pt0),0)
Out[27]: array([False, False, False, True, False, False, False, False], dtype=bool)
MA
기능은 자주 (이 경우 0) 무해한 뭔가 마스크 값을 교체하거나 고려에서 제거 할 compressed
를 사용합니다.
In [36]: m_pt0.compressed()
Out[36]: array([1, 3, 0, 4, 7, 6, 5])
In [37]: m_pt0.filled(100)
Out[37]: array([ 1, 100, 3, 0, 4, 7, 6, 5])
numpy 함수는 작업을 배열 자체 메서드에 위임하면 MA에서 올바르게 작동합니다.
In [41]: np.nonzero(m_pt0)
Out[41]: (array([0, 2, 4, 5, 6, 7], dtype=int32),)
In [42]: m_pt0.nonzero()
Out[42]: (array([0, 2, 4, 5, 6, 7], dtype=int32),)
In [43]: np.where(m_pt0)
Out[43]: (array([0, 1, 2, 4, 5, 6, 7], dtype=int32),)
np.nonzero
대리인. np.where
은 그렇지 않습니다.
마스크 된 어레이의 repr
은 마스크를 나타낸다. 그 str
은 마스크 된 데이터를 보여줍니다 :
In [31]: m_pt0
Out[31]:
masked_array(data = [1 -- 3 0 4 7 6 5],
mask = [False True False False False False False False],
fill_value = 999999)
In [32]: str(m_pt0)
Out[32]: '[1 -- 3 0 4 7 6 5]'
'numpy.ma' 서브 모듈에서'ma.where()'를 시도 했습니까? 다른 결과가 나옵니까? – blubberdiblub
전체 코드를 입력하십시오. 내가 조립 한 예에서는 모든 것이 예상대로 작동합니다. –
'[1 - 3 0 4 7 6 5]'는 유효한 numpy 객체가 아닙니다. 당신이 말하는 진짜 대상은 무엇입니까? – Kasramvd