각각의 방향 (x
, y
, z
)에 24 개, 다른 시간대에 24 개의 netCDF 파일이 있습니다. 마지막 시점에서 모든 시간 간격에 대한 데이터를 플롯해야합니다.여러 netCDF 파일의 데이터를 파이썬으로 연결하는 방법
음모를 꾸미려면 특정 점을 보간해야하므로 가장 가까운 이웃을 알고 있어야합니다. 내 계획은 데이터를 3D 셀로 나누기 때문에 전체 데이터 세트에서 가장 가까운 이웃을 검색 할 필요가 없습니다.
그래서 내 첫 번째 단계에서는 데이터 파일을 읽고 배열 마녀를 만들 때 [x,y,z,v[:]]
각 포인트의 좌표와 매번 값이 들어 있습니다. x
, y
, z
와 v
: vecs
모든 데이터 포인트 배열이
for vec in vecs:
x_ind = int((vec[0]-xmin)/stepWidthX)
y_ind = int((vec[1]-ymin)/stepWidthY)
z_ind = int((vec[2]-zmin)/stepWidthZ)
if x_ind==gridPointsInXdirection:
x_ind = x_ind-1
if y_ind==gridPointsInYdirection:
y_ind = y_ind-1
if z_ind==gridPointsInZdirection:
z_ind = z_ind-1
#print z_ind, y_ind,x_ind
XGridPoints[z_ind, y_ind, x_ind] = np.append(XGridPoints[z_ind, y_ind, x_ind], vec[0])
YGridPoints[z_ind, y_ind, x_ind] = np.append(YGridPoints[z_ind, y_ind, x_ind], vec[1])
ZGridPoints[z_ind, y_ind, x_ind] = np.append(ZGridPoints[z_ind, y_ind, x_ind], vec[2])
VGridPoints[z_ind, y_ind, x_ind] = np.append(VGridPoints[z_ind, y_ind, x_ind], vec[3])
내가 각 포인트에 대한 계산이 후 세포는 4 차원의 배열에 추가 속하는 . 지금까지는 작동하지만 문제는 현재 VGridPoints
에 있습니다. 값 목록이 길고 배열 목록이 없습니다.
x = XGridPoints[2,3,4][2]
y = YGridPoints[2,3,4][2]
z = ZGridPoints[2,3,4][2]
v[:] = VGridPoints[2,3,4][2]
내가 셀을 다시 계산하면 나는 그것이 작동하고 한 번만 스텝을하지만 큰 오버 드라이브를
과 : 내가 좋아 나중에 뭔가 액세스 할 수 있도록 배열 요소에 배열을 추가 할 수있는 솔루션이 있습니까 각 시간 단계에 가장 가까운 이웃과 시간이 지남에 따라 위치를 변경하지 않습니다.
당신의 질문이 아니지만, 왜 scipy.spatial.cKDTree를 사용하지 않습니까? 당신은 바퀴를 재발견하는 것처럼 보입니까? 또한 scipy.ndimage는 이미 원하는 것을 할 수있는 보간법을 가지고 있습니다. 문제에 대한 가장 간단한 해결책은 _everything_을 수용 할 수있을만큼 큰 이미 하나의 큰 배열을 생성하는 것입니다. – seberg