3次元データの行列要素と行及び列番号の取り出し
조회 수: 17 (최근 30일)
이전 댓글 표시
채택된 답변
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개)
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
(略)
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!