Opendap와 netCDF의 불규칙한 색인을 사용하여 추출을 허용하지 않습니다. 시작, 중지 및 보폭 만 요청할 수 있습니다.
그리고 이것이 삼각형 격자이기 때문에 동일한 영역의 삼각형 노드가 유사한 색인을 가지고 있다고 보장 할 수 없습니다. 따라서 경계 상자 내의 노드 만 가져 오려면 하나씩 요청해야합니다. 그리고 그것은 느립니다. 따라서 대부분의 경우 최소 및 최대 인덱스를 결정하고 전체 덩어리를 한 조각으로 요청한 다음 필요에 따라 인덱스를 추출하는 것이 더 빠릅니다.
다음은 파이썬에서 두 가지 접근법을 비교 한 샘플입니다. 우리는 각 인덱스를 통해 루프가 느린 경우
import netCDF4
import time
import numpy as np
url='http://www.smast.umassd.edu:8080/thredds/dodsC/FVCOM/NECOFS/Forecasts/NECOFS_GOM3_FORECAST.nc'
nc = netCDF4.Dataset(url)
ncv = nc.variables
lon = ncv['lon'][:]
lat = ncv['lat'][:]
tim = ncv['time'][:]
# find indices inside box
box = [-71.4,41,-70.2,41.5]
ii = (lon>=box[0])&(lon<=box[2])&(lat>=box[1])&(lat<=box[3])
# jj will have just indices from inside the box:
jj = np.where(ii)[0]
:
# loop over indices, extracting time series
time0=time.time()
zi = np.zeros((len(tim),len(jj)))
k=0
for j in jj:
zi[:,k]=ncv['zeta'][:,j]
k +=1
print('elapsed time: %d seconds' % (time.time()-time0))
elapsed time: 56 seconds
이 예에서 모든 인덱스를 포함하는 부분 집합을 추출하는 추출, 시계열 각 인덱스를 통해 반복보다 약 10 배 빠른 각 시간 단계에서 범위 우리는 루프 경우
는하지만, 훨씬 더 빠르다 : 물론
time0=time.time()
zi2 = np.zeros((len(tim),len(jj)))
jmin=jj.min()
jmax=jj.max()
for i in range(len(tim)):
ztmp = ncv['zeta'][i,jmin:jmax+1]
zi2[i,:] = ztmp[jj-jmin]
print('elapsed time: %d seconds' % (time.time()-time0))
elapsed time: 6 seconds
하면 결과는 구조화되지 않은 그리드의 크기에 따라 페이지의 근접 다를 수 있습니다 당신의 추출물의 점수, 추출한 점수 등을 포함 할 수 있습니다.
감사합니다. 이것은 매우 도움이됩니다. 나는 이것을 바탕으로 무언가를 찾으려고 노력할 것이다.목표는 하위 집합으로 NetCDF 파일을 갖는 것입니다. 흰 족제비에서는'save/file = myfile.nc/i = 55 : 94/j = 204 : 253 TEMP, SALINITY'와 같이 간단하게 온도와 염분의 작은 파일을 만들었습니다. 당신이 제공 한 것과 함께 일하고 NetCDF에 저장할 코드를 추가하려고합니다. –