2017-03-21 7 views
1

に特定のディメンションの上に特定の変数の値を変更することはできません:は、私はnetCDFファイル含む4-Dの変数を持っていたNetCDF

variables: 
    double maxvegetfrac(time_counter, veget, lat, lon) ; 
     maxvegetfrac:_FillValue = 1.00000002004088e+20 ; 
     maxvegetfrac:history = "From Topo.115MaCTRL_WAM_360_180" ; 
     maxvegetfrac:long_name = "Vegetation types" ; 
     maxvegetfrac:missing_value = 1.e+20f ; 
     maxvegetfrac:name = "maxvegetfrac" ; 
     maxvegetfrac:units = "-" ; 

    double mask_veget(time_counter, veget, lat, lon) ; 
     mask_veget:missing_value = -1.e+34 ; 
     mask_veget:_FillValue = -1.e+34 ; 
     mask_veget:long_name = "IF MYVEG4 EQ 10 AND I GE 610 AND J GT 286 THEN 16 ELSE MYVEG4" ; 
     mask_veget:history = "From desert_115Ma_3" ; 

私はの値を変更するためのマスクとして変数「mask_veget」を使用したいのですが特定の領域にわたる変数「maxvegetfrac」、およびその「veget」次元の選択された値に対するものである。 これを行うには、ncap2を使用しています。私はmask_vegetは6に等しい500にveget寸法の第五位上maxvegetfrac値を設定したい場合たとえば、私が行います

> ncap2 -s "where (mask_veget(:,:,:,:)== 6) maxvegetfrac(:,5,:,:) = 500" test.nc 

私の問題は、結果test.ncファイルで、maxvegetfracが変更されているということです第5位ではなく、第1位の「菜食主義者」の次元である。私は全体veget寸法上でスクリプトを実行する場合、私は同じ結果を得る:

ncap2 -s "where (mask_veget(:,:,:,:)== 6) maxvegetfrac(:,:,:,:) = 500" test.nc 

だから私はどこか勘違いが...どこですか? 何か助けに感謝します!

答えて

1

あなたが気付いていないことがいくつかありますが、あなたはその場所で変数をハイパーラブしてはいけません。

これを試してみてください単一の値で薄暗いように、その単一のインデックス を証明する文が

を崩壊どこにハイパースラブしても大丈夫です。

/*** hyper.nco *****/ 
maxvegetfrac5=maxvegetfrac(:,5,:,:); 

where(mask_veget(:,5,:,:)== 6) 
    maxvegetfrac5=500.0; 

/* put the hyperslab back in */ 
maxvegetfrac(:,5,:,:)=maxvegetfrac5; 
/* script end *****/ 

はコマンド

で今すぐスクリプトを実行します
ncap2 -v -O -S hyper.nco test.nc out.nc 

...ヘンリー

+0

は非常にヘンリーをいただき、ありがとうございます。それは完璧に働いた。 –

関連する問題