@cccqwakk (航 鈴木)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MATLAB、テキストファイルの位置情報をカラーマップしたい

解決したいこと

MATLABのプログラムの質問です。
下記のような横軸x、縦軸yのそれぞれの位置とその場所の値が書かれたtxtファイルがあります。
このデータを元に、行列やカラーマップのような結果が得たいです。
このような事をする場合どのような事を行ったり参考にすればよいでしょうか?

読み込むファイル

image.png

目標の結果のイメージ

image.png

0 likes

1Answer

まず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]);
0Like

Comments

  1. @cccqwakk

    Questioner

    ありがとうございます!おかげで助かりました。調べ、入力する際のワードや参考プログラムもあり、大変分かりやすかったです

Your answer might help someone💌