形状変換

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 件)

カテゴリ

Find more on Matrix Indexing in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!