2017-12-14 11 views
0

배열 내부의 조건을 확인하고 조건이 충족되는 위치에서 작업을 수행하고 싶습니다. 예를 들어,이 코드 조각 작업을 수행합니다배열 내의 조건 확인

res = somefunction(x) 
for i in range(x.shape[0]): 
    for j in range(x.shape[1]): 
     if not 6 < res[i,j] < 18: 
      x[i,j] = float('nan') 

을하지만 빠른 (짧은) 방법은 어쩌면 이런 일이 될 것이라고 생각 :

x[not 6 < somefunction(x) < 18] = float('nan') 

그러나 파이썬은 조건을 확인하는 오류를 제공 요소 이상으로 배열에서는 작동하지 않습니다. 코드를 더 빠르게 만들 수있는 방법이 있습니까?

+0

'의 X [~ ((6 < x) & (x <18))] = np.nan'이 효과가 있습니까? –

답변

1

not이나 연결된 비교를 브로드 캐스트하기 위해 구현할 수 없으므로 배열과의 연결 비교는 사용할 수 없습니다. NumPy와 부울 배열에 부울 연산을위한 비트 연산자를 사용하기 때문에

분할이 개 비교에 체인 비교 및 ​​~를 사용 & 대신 notand :

x[~((6 < res) & (res < 18))] = numpy.nan 
+0

좋아요, 게시했을 때 이것을 보지 못했습니다. 제거 할 것입니다. –

+0

'x'는 float이나 object가 있어야 작동합니다. –