2014-12-23 6 views
0

의 내가 같은 변수에 더 긴 시간 시리즈를 저장하는 '시간'라는 이름과 500Matlab으로 이미 채워진 netcdf 파일의 배열 크기를 조정하려면 어떻게해야합니까?

nc=netcdf(ncfile, 'write') 
size(nc{'time'}) 
ans = 
500 

이제 내가 원하는의 크기가 그 중 하나의 변수의 톤을 가진 netCDF의 파일이 있다고 가정 해 봅시다 (750 명의 회원),하지만 나머지 파일은 동일하게 유지하고 싶습니다. netcdf 파일의 나머지 변수를 그대로 유지하면서이 변수의 크기를 750으로 변경하려면 어떻게합니까?

단순히

nc{'time'}(750)=1 

가 나는 I를 작성하는 노력 (이 전혀 값을 기록하지 않습니다 의미) 오류하지만 배열 크기가 변경되지 않습니다주지 않았다 배열에 추가 시도

파일을 다시 정의 모드로 전환하고 크기를 변경했지만 기존 변수를 변경할 수 없습니다.

dimid=netcdf.defDim(ncid,'time',750) 

Error using netcdflib 
The NetCDF library encountered an error during execution of 'defDim' function - 'String match to 
name in use (NC_ENAMEINUSE)'. 

내가하기가 너무 어렵다고 상상할 수는 없지만 생각만큼 쉽지는 않습니다. 어떤 제안? 내가 뭘 놓치고 있니?

답변

1

NetCDF는 치수를 고정 길이 또는 무제한 길이로 허용합니다. 기존 netcdf 파일 배열을 "크기를 조정"할 수는 없습니다. 기존 UNLIMITED 차원의 끝에 추가하거나 새 파일을 만들 수 있습니다. 먼저 netcdf 파일에 UNLIMITED 시간 차원이 있는지 확인하십시오. 당신은 수행하여 matlab에이를 확인할 수 있습니다 dimids이 비어 있거나 시간을 포함하지 않습니다, 당신은 제한 시간 차원으로 새 파일을 만들고 그것으로 데이터를 복사해야합니다

ncid = netcdf.open('myfile.nc','WRITE'); 
dimids = netcdf.inqUnlimDims(ncid) 

합니다.

dimids에 시간 차원이 포함되어 있으면 데이터를 쓸 수 있습니다. 시간 값의 현재 수는 500이지만 지수 750에서 23.5 시간 값을 작성하려는 경우 예를 들어, 바로 수행 무제한이며, 현재 500 개 기록을 가지고 있지만, 당신이 원하는

timeid = netcdf.inqVarID(ncid,'time') 
[varname, xtype, dimids, natts] = netcdf.inqVar(ncid,timeid) 
netcdf.putVar(ncid,timeid,750,1,23.5) 
netcdf.close(ncid) 

750을 기록하면, 그냥 가서 쓸 수 있습니다.

+0

예, 이것이 문제의 일부입니다. 무제한 차원이 없습니다. UniData 웹 페이지에서도 "이름은 나중에 변경 될 수 있지만 모든 데이터를 치수가 다시 정의 된 새 NetCDF 파일로 복사하지 않으면 이름의 크기를 변경할 수 없습니다."라는 대답을 발견했습니다. 감사! – ZZZ

관련 문제