3次元データの行列要素と行及び列番号の取り出し

17 次查看(过去 30 天)
VAMOU
VAMOU 2018-1-26
评论: VAMOU 2018-1-30
サイズが256×256×60である三次元行列Aに数値が格納されているとして、 A(i,j,k)=Bに対し新たにi,j,k,Bを項目とした表(行列)を作成する方法を知りたいです。
  2 个评论
michio
michio 2018-1-26
A(i,j,k) = B に対しというのはどういうことでしょうか。Bはスカラー値ですか? 簡単な小さな例で構いませんので、最終的に求められたい出力例をいただけますか?
VAMOU
VAMOU 2018-1-26
Bはスカラー値となります。 行列Aの各要素を取り出す際A(1,1,1)=128 などと求めることができると思いますが、A(1,1,1)を3次元座標(i,j,k)と見立てて、その要素128と紐づけて添付画像のような表を出力させたいです。

请先登录,再进行评论。

采纳的回答

michio
michio 2018-1-26
詳細ありがとうございます。 簡単な 4x3x2 の行列 Aで実施してみます。もっときれいな方法があると思いますが、それはほかの回答者を待ってみましょう。
A1 = rand(4,3,2); % サンプルデータ
x = 1:4;
y = 1:3;
z = 1:2;
[ii,jj,kk] = ndgrid(x,y,z);
A2 = [ii(:),jj(:),kk(:),A1(:)];
A1(:,:,1) に対応するところだけ取り出してみますと、
>> A1(:,:,1)
ans =
0.5805 0.8372 0.3427
0.2768 0.7530 0.4365
0.0920 0.3645 0.2582
0.2606 0.5996 0.4321
>> A2
A2 =
1.0000 1.0000 1.0000 0.5805
2.0000 1.0000 1.0000 0.2768
3.0000 1.0000 1.0000 0.0920
4.0000 1.0000 1.0000 0.2606
1.0000 2.0000 1.0000 0.8372
2.0000 2.0000 1.0000 0.7530
(略)
となります。いかがでしょうか。
登場する関数はそれぞれ
doc rand
doc ndgrid
などのコマンドで立ち上がる、対応するドキュメンテーションページを確認してみてください。
  1 个评论
VAMOU
VAMOU 2018-1-26
michioさん 拙い説明ですみません。回答ありがとうございます。

请先登录,再进行评论。

更多回答(1 个)

Tohru Kikawada
Tohru Kikawada 2018-1-29
michio さんの方法で答えになっていると思いますが、こんな方法も使えるかもしれません。
rng('default'); % 毎度同じランダムシードを使う
A1 = rand(4,3,2) % サンプルデータ
[ii,jj,kk] = ind2sub(size(A1),1:numel(A1))
A2 = [ii(:),jj(:),kk(:),A1(:)]
実行結果
A1(:,:,1) =
0.8147 0.6324 0.9575
0.9058 0.0975 0.9649
0.1270 0.2785 0.1576
0.9134 0.5469 0.9706
A1(:,:,2) =
0.9572 0.4218 0.6557
0.4854 0.9157 0.0357
0.8003 0.7922 0.8491
0.1419 0.9595 0.9340
A2 =
1.0000 1.0000 1.0000 0.8147
2.0000 1.0000 1.0000 0.9058
3.0000 1.0000 1.0000 0.1270
4.0000 1.0000 1.0000 0.9134
1.0000 2.0000 1.0000 0.6324
2.0000 2.0000 1.0000 0.0975
(略)
  1 个评论
VAMOU
VAMOU 2018-1-30
Kikawadaさん 
ind2subで可能なのですね。ありがとうございます。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 行列および配列 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!