MATLAB、テキストファイルの位置情報をカラーマップしたい
Q&A
解決したいこと
MATLABのプログラムの質問です。
下記のような横軸x、縦軸yのそれぞれの位置とその場所の値が書かれたtxtファイルがあります。
このデータを元に、行列やカラーマップのような結果が得たいです。
このような事をする場合どのような事を行ったり参考にすればよいでしょうか?
読み込むファイル
目標の結果のイメージ
0 likes
Q&A
MATLABのプログラムの質問です。
下記のような横軸x、縦軸yのそれぞれの位置とその場所の値が書かれたtxtファイルがあります。
このデータを元に、行列やカラーマップのような結果が得たいです。
このような事をする場合どのような事を行ったり参考にすればよいでしょうか?
まずreadmatrix関数を使って、行列のデータを読み込みます。この時に'NumHeaderLines'プロパティで、スキップするヘッダの行数を指定して、行列データ部分だけを抜き出します。
次に抜き出したデータから、本来作りたい結果(としての行列)を作成します。紛らわしいので、ファイルから読み込んだ状態の行列データをp,本来作りたい結果としての行列をqとします。
やりかたは二通りあるかと思います。
正攻法は、まずqのサイズはわかっていると思いますので、zeros関数を使って、全部ゼロのqを作ります。そこにpの情報を使って、
q(y,x) = A;
という形で,xyの位置にAを埋め込んでいくというものです。x,y,Aは
x = p(i,1);
y = p(i,2);
A = p(i,3);
という風にアクセスできます。iをforループで回していけば9個のAに全てアクセスできます。
もう一つのやり方は、x,yの並びが規則的なことを利用して、Aだけ抽出してreshape関数で形を変えてしまう、というものです。
A = p(:,3);
A = reshape(A, [3 3]);
でこれを実現できます。
せっかくなのでコードは次の通りです。
p = readmatrix('my_txt.txt', 'NumHeaderLines', 5);
% 正攻法
q = zeros(3,3);
for i = 1:9
q(p(i,2),p(i,1)) = p(i,3);
end
% もう一つのやり方
q = reshape(p(:,3), [3 3]);
@cccqwakk
Questioner