2014-11-14 2 views
0

여기 Python noobie :) 사물을 간결하게 처리하는 방법을 찾으려합니다.0이 아닌 경우 ndarray의 모든 요소에 1을 추가하십시오.

>>> f = np.zeros((2,2), dtype=int) 
>>> f[0][1] = 100 
>>> f[1][0] = 200 
>>> print f 

[[ 0 100] 
[200 0]] 

>>> f1 = # do something special 
>>> print f1 

[[ 0 101] 
[201 0]] 

고마워요!

+0

원하는 [마스크 배열] (http://docs.scipy.org/doc/numpy/reference/maskedarray.html). 구체적으로 [masked where] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html). – will

답변

6

약간 더 나은 방법 boolean indexing을 사용하는 것이다

>>> import numpy as np 
>>> a = np.array([[0,100],[200,0]]) 
>>> a[a!=0] += 1 
>>> a 
array([[ 0, 101], 
     [201, 0]]) 

오히려 잘 findnp.where와 유사한 역할을 제공하는 매트랩 포럼에 설명되는 개선 이유. 예를 들어, this Matlab thread에서는 find이 부울 배열로 호출됩니다. find 다음 인덱스를 추출하는 몇 가지 추가 기능을 수행합니다. 이 색인은 numpy에서 "멋진 색인 생성"으로 알려진 것을 수행하는 데 사용됩니다. 그러나 배열 자체는 부울 배열로 멋진 방식으로 색인을 생성 할 수있었습니다.

+0

+1은 사이버의 답변보다'where()'...가 더 빠를 것입니다. –

+0

이걸 가장 좋은 것으로 선택하십시오. 둘 다 좋은 답변입니다 :) – dana

4

numpy.where을 사용하여 값이 0이 아닌 부분을 파악한 다음 모든 값에 1을 더할 수 있습니다.

>>> a = np.array([[0,100],[200,0]]) 
>>> a 
array([[ 0, 100], 
     [200, 0]]) 

>>> a[np.where(a != 0)] += 1 
>>> a 
array([[ 0, 101], 
     [201, 0]]) 
+0

훌륭합니다, 감사합니다! – dana

관련 문제