Octave 用の Google Earth ツールボックスを使用しています。これは、MATLAB 用に作成された同じライブラリと非常によく似ています。ツールの MATLAB ドキュメントについては、このリンクを参照してください。
残念ながら、特定の機能に少し問題があります: ge_quiver
. この関数は、quiver プロットを作成し、結果を KML コードに変換します。私の問題は、私の好みには少し遅すぎることです。
サイズが 30x30 のデータ変数の場合、関数が完了するまでに約 10 秒かかります。23 個の同じサイズのデータ変数 (合計 24 個) を使用して、アニメーションの震えプロットを作成しようとしているという事実を除いて、これは問題ありません。通常、Octave (および MATLAB) は 1 つのスレッドでのみ実行されるため、すべてがシリアルに実行され、10*24 = 240 秒かかります。
ループを試してみparfor
ましたが、総実行時間から 10 秒しか減りませんでした。16 コアのコンピューターを使用しています。これは恥ずかしいほど並列である(変数間に依存関係がない)ことを考えると、理想的には次のようにする必要があります。
最初の 16 個の変数に
10 秒 + 残りの 8 個の変数に 10 秒
----------------------------------- -------------------
= 合計 20 秒。
関数を適応させる方法がわからないため、arrayfun もテストしていません ( p_ge_quiver
)。それにもかかわらず、多くの人は、arrayfun を使用しても速度が向上しないと言っています。
次のコードは、おおよそ私がやろうとしていることです。変数
data_u
のサイズは 30x30x24 であることに注意してください。data_v
、lon
およびについても同じですlat
。
...
...
[YYYY,MM,DD,HH,mm,ss] = ncdate(NCFILE);
date_s.year = YYYY;
date_s.month = MM;
date_s.day = DD;
date_s.hour = HH;
date_s.minute = mm;
date_s.second = ss;
TIMESTEP = 60;
parfor i = 1:size(data_u,3)
dt = TIMESTEP*i;
kml(i) = p_ge_quiver(lon,lat,data_u,data_v,dt,TIMESTEP,data_s);
endparfor
...
...
function kml = p_ge_quiver(lon,lat,u,v,data_time,step,date_s)
% V_GE_QUIVER - Writes the quiver plot into KML.
% Get date variables.
YYYY = date_s.year;
MM = date_s.month;
DD = date_s.day;
HH = date_s.hour;
mm = date_s.minute;
ss = date_s.second;
% Date format. Use Google's.
F = 'yyyy-mm-ddTHH:MM:SSZ';
% Start and end dates of data.
tStart = datestr(datenum(YYYY,MM,DD,HH,mm+data_time,ss),F);
tEnd = datestr(datenum(YYYY,MM,DD,HH,mm+data_time+step,ss),F);
% Quiver plot.
kml = ge_quiver(lon,lat,u,v,'timeSpanStart', tStart, ...
'timeSpanStop' , tEnd , ...
'visibility' , 0 , ...
'lineColor' , 'AAFFFFFF');
end