2012-08-27 4 views
1

각각의 방향 (x, y, z)에 24 개, 다른 시간대에 24 개의 netCDF 파일이 있습니다. 마지막 시점에서 모든 시간 간격에 대한 데이터를 플롯해야합니다.여러 netCDF 파일의 데이터를 파이썬으로 연결하는 방법

음모를 꾸미려면 특정 점을 보간해야하므로 가장 가까운 이웃을 알고 있어야합니다. 내 계획은 데이터를 3D 셀로 나누기 때문에 전체 데이터 세트에서 가장 가까운 이웃을 검색 할 필요가 없습니다.

그래서 내 첫 번째 단계에서는 데이터 파일을 읽고 배열 마녀를 만들 때 [x,y,z,v[:]] 각 포인트의 좌표와 매번 값이 들어 있습니다. x, y, zv : 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] 
내가 셀을 다시 계산하면 나는 그것이 작동하고 한 번만 스텝을하지만 큰 오버 드라이브를

과 : 내가 좋아 나중에 뭔가 액세스 할 수 있도록 배열 요소에 배열을 추가 할 수있는 솔루션이 있습니까 각 시간 단계에 가장 가까운 이웃과 시간이 지남에 따라 위치를 변경하지 않습니다.

+1

당신의 질문이 아니지만, 왜 scipy.spatial.cKDTree를 사용하지 않습니까? 당신은 바퀴를 재발견하는 것처럼 보입니까? 또한 scipy.ndimage는 이미 원하는 것을 할 수있는 보간법을 가지고 있습니다. 문제에 대한 가장 간단한 해결책은 _everything_을 수용 할 수있을만큼 큰 이미 하나의 큰 배열을 생성하는 것입니다. – seberg

답변

1

Numpy는 일반적으로 을 알고 계시면 편리하게 배열 할 모양의을 알 수 있습니다. 배열에 추가하는 것과 같은 것은 성능 저하를 겪습니다. 나는 가능한 한 가장 쉬운 방법은 모든 것을 담을 수있는 배열을 만드는 것이다 (최악의 시나리오)라고 세바스찬과 동의한다. 이것이 가능하지 않다면 객체 배열을 시도해 볼 수 있습니다. 예를 들어, 3 차원 공간을 가진 개체 배열 생성 :

import numpy as N 
XGridPoints = N.empty((nx, ny, nz), dtype='object') 

(. 그리고 YGridPoints 대해 동일한, ZGridPoints, VGridPoints)를 그리고 다음은 NumPy와 배열 XGridPoints[z_ind, y_ind, x_ind]을 설정할 수 있으며, 필요로하는 배열에 추가 .

관련 문제