2016-07-08 2 views
0

나는 이걸 가지고 있습니다. 모양이있는 arr (50, 360, 720)이라는 numpy의 마스크 된 배열 :마스킹 된 숫자 배열의 값을 바꿀 수 없습니다.

masked_array(data = 
[[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
..., 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --]], 
      mask = 
[[ True True True ..., True True True] 
[ True True True ..., True True True] 
[ True True True ..., True True True] 
..., 
[ True True True ..., True True True] 
[ True True True ..., True True True] 
[ True True True ..., True True True]], 
     fill_value = 1e+20) 

다음과 같은 문자가 있습니다. arr [0]의 데이터 :

arr[0].data 

array([[-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     ..., 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.]]) 

-999 missing_value이고 0.0으로 바꾸고 싶습니다. 나는 이렇게한다 :

그러나이 작업 후에도 arr은 동일하게 유지된다. 이 문제를 해결하는 방법?

+0

배열의 '데이터'를 변경했을 수도 있지만 마스크는 변경하지 않았습니다. – hpaulj

+0

감사합니다 @ hpaulj, 어떻게 고칠 수 있습니까? – user308827

+0

ma.set_fill_value를 사용하여 시도했지만 그 중 하나가 작동하지 않는 것 같았습니다. – user308827

답변

1

어쩌면 당신은 filled을 원할 것입니다. 나는 설명합니다 :이 경우 filled에서

In [702]: x=np.arange(10)  
In [703]: xm=np.ma.masked_greater(x,5) 

In [704]: xm 
Out[704]: 
masked_array(data = [0 1 2 3 4 5 -- -- -- --], 
      mask = [False False False False False False True True True True], 
     fill_value = 999999) 

In [705]: xm.filled(10) 
Out[705]: array([ 0, 1, 2, 3, 4, 5, 10, 10, 10, 10]) 

은 채우기 값으로 모든 마스크 값을 대체합니다. 인수가 없으면 fill_value을 사용합니다.

np.ma은이 방법을 사용하여 많은 계산을 수행합니다. 나는 1

In [707]: xm.sum() 
Out[707]: 15 
In [709]: xm.filled(0).sum() 
Out[709]: 15 

모든 마스크 값이 무언가로 대체 되었기 때문에 filled의 결과는, 규칙적인 배열로 교체 할 0 prod 모든 마스크 값을 작성하는 경우 예를 들어 그 sum은 '동일 표준'.

관련 문제