i,j,zの3列ベクトルからメッシュデータに変換する

i,j,zのベクトルが結合したn×3の行列

i  j   z
1  1  0.0
1  2  0.0
.. ..  ..

のような変数があるとする.このzの値を

z(i,j)

のようにメッシュデータに格納したい. 全てのi,jデータがあれば,reshapeで変換可能.しかし無駄なデータを省き全ての点を含めない場合も多い.MATLAB以外からデータを読み込んだ後によく変換したくなる.
ここで,nxはj(横)方向,nyはi(縦)方向のメッシュサイズ,vecdataはi,j,zのn×3の行列として,matrixdataという変数にny行nx列の行列をしまい込むことを考える.

matrixdata = zeros(ny,nx);
matrixdata(:) = NaN;
for k = 1:size(vecdata,1)
    matrixdata(vecdata(k,1),vecdata(k,2)) = vecdata(k,3);
end

空白部分がNaNではなく0で良いのなら,スパース行列を作成するsparseで変換できる.メモリ消費を抑えるというメリットはあるが,0が意味を持つ数値(標高,水深等)だとなんだか不安.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2017-05-29 (Mon) 16:24:32 (143d)