形状変換

조회 수: 3 (최근 30일)
sz
sz 2021년 11월 8일
답변: Shunichi Kusano 2021년 11월 8일
現在19×19の行列が231250個あります。
この中身は全て1と0の数字しかなく対角部分は数字が同じで対角線上は必ず1が入るようにしています。
そして対角になる部分だけを取り出して行列の形状変換をお願いしたいです。
行列が多いので3×3で下記で説明するので、それを19×19を231250個でどのように書けばよいかスクリプトを教えていただきたいです。
3×3行列が3個ある場合で説明
1 1 0     1 0 1    1 1 0
1 1 0     0 1 1    1 1 1
0 0 1     1 1 1    0 1 1
この1行2列目と1行3列目と2行3列目の数字だけ取り出して1行にまとめる
(1,0,0)
(0,1,1)
(1,0,1)
このように三次元のものを2次元に変更したいです
19×19の231250個分の場合171×231250行列になるはずです。
よろしくお願いいたします
rng(1,'philox')
X = randi([0 1], 19, 19, 231250);
乱数使用で1と0の行列は作りました。

채택된 답변

Shunichi Kusano
Shunichi Kusano 2021년 11월 8일
reshapeによる配列変形で楽に処理可能です。
clear
wh = 19;
num = 10000;
X = randi([0 1], wh, wh, num); % ダミーデータ(どうせ使わないので対角性は考慮していない)
% 下対角成分だけを抽出するためのマスク
mask = double(~triu(ones(wh)));
mask(mask==0) = nan;
% マスキング
X_ = X .* mask;
% 変形
X_ = reshape(X_,wh^2,num);
X_(isnan(X_(:,1)),:) = []; % マスクした要素を行ごと消去
X_ = X_'; % 必要に応じて

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 行列および配列에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!