2016-07-14 5 views
2

numgpy의 meshgrid가 있습니다. 포인트에 대한 계산을합니다. 어떤 이유로 든 calcutaled 수없는 지점을 필터링하려면 (제로 나누기). 그 3D 메쉬 배열을 사용하여 z/(y - x)를 수행numpy meshgrid 필터 아웃 포인트

from numpy import arange, array 
Xout = arange(-400, 400, 20) 
Yout = arange(0, 400, 20) 
Zout = arange(0, 400, 20) 
Xout_3d, Yout_3d, Zout_3d = numpy.meshgrid(Xout,Yout,Zout) 

#some calculations 
# for example 
b = z/(y - x) 
+0

필터링을하면 'Xout_3d, Yout_3d, Zout_3d'의 필터를 제거한다는 의미입니까? 그렇다면 IIUC는 더 이상 일반 3D 배열로 머무를 수 없습니다. 아니면 NaN이나 그와 같은 것으로 설정하는 것이 좋을까요? – Divakar

+0

이 점들을 플롯하려고하므로 NaN으로 설정하거나 0으로 설정하는 것이 좋습니다. – microspace

답변

1

, 당신은 올바른 사람의 마스크를 만들 수 있습니다. 이제 유효한 것은 yx 사이의 조합 쌍이 동일하지 않은 조합입니다. 따라서이 마스크의 모양은 (M,N)이고 MN은 각각 YX 축의 길이입니다. 이러한 마스크를 XY 사이의 모든 조합에 적용하려면 NumPy's broadcasting을 사용할 수 있습니다. 따라서, 우리가 같은 같은 마스크를 것 - 3D 배열의 첫 번째 두 축을 따라 마스크를 방송하는 방송을 사용하여 다시

mask = Yout[:,None] != Xout 
마지막으로

등을, 우리는 분열을 수행하고 잘못된 지정을 선택할 수 있습니다 우리가 직접 방송을 이용하여 이러한 출력을 얻을 수 있으므로 meshgrid를 사용하여 회피 할 수 대안

invalid_spec = 0 
out = np.where(mask[...,None],Zout_3d/(Yout_3d-Xout_3d),invalid_spec) 

을 그 무거운 01,239을 갖는 - 실제 분할 결과는 다음처럼 np.where를 사용작업 공간의 배열. 아이디어는 동시에 3D 격자를 채우고 동시에 뺄셈과 나누기 계산을 수행하는 것입니다. 따라서, 구현은 다음과 같이 보일 것입니다. -

np.where(mask[...,None],Zout/(Yout[:,None,None] - Xout[:,None]),invalid_spec) 
+0

자세한 답변 해 주셔서 감사합니다. 나는 정말로 미안하다. 그러나 모든 거기의 얇게 썰 렸고 줄임표는 나의 이해력을 넘어있다. ((( 간단히 말해서 이해할 수 없다.) – microspace

+0

@microspace 하하 나는 이러한 다차원적인 개념과 방송에 익숙해 져있는 데 시간을 많이 쏟는다. – Divakar

관련 문제