#author("2018-01-11T00:50:47+09:00","default:Miyashita","Miyashita")
#author("2018-07-25T20:55:31+09:00","default:Miyashita","Miyashita")
*i,j,zの3列ベクトルからメッシュデータに変換する [#xc0756e7]
i,j,zのベクトルが結合したn×3の行列
 i  j   z
 1  1  0.0
 1  2  0.0
 .. ..  ..
のような変数があるとする.このzの値を
 z(i,j)
のようにメッシュデータに格納したい.~
のような変数があるとする.このzの値を z(i,j) とメッシュデータに格納したい.~
全てのi,jデータがあれば,reshapeで変換可能.~
メッシュ上のデータに欠損があったり,並びが不規則な場合にはreshapeを使うことは出来ない.~
ここで,vecdataはi,j,zのn×3の行列とし,dataという変数にny行nx列の行列をしまい込むことを考える.
 data = sparse(vecdata(k,1),vecdata(k,2),vecdata(k,3));
 matrixdata = zeros(ny,nx);
 matrixdata(:) = NaN;
 for k = 1:size(vecdata,1)
     data(vecdata(k,1),vecdata(k,2)) = vecdata(k,3);
 end
#codeprettify(lang-matlab){{
data = sparse(vecdata(k,1),vecdata(k,2),vecdata(k,3));
matrixdata = zeros(ny,nx);
matrixdata(:) = NaN;
for k = 1:size(vecdata,1)
    data(vecdata(k,1),vecdata(k,2)) = vecdata(k,3);
end
}}
また,スパース行列を作成するsparseでも可.こちらの方が簡単.
  data = sparse(vecdata(k,1),vecdata(k,2),vecdata(k,3));
#codeprettify(lang-matlab){{
data = sparse(vecdata(k,1),vecdata(k,2),vecdata(k,3));
}}
空白部分がNaNでなくて良い場合は,メモリ消費を抑られるのでsparseを使う.

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes