MATLAB Answers

特定の行列のみを取り出して平均を出したい

72 ビュー (過去 30 日間)
Taiga Miyashita
Taiga Miyashita 2020 年 7 月 9 日
コメント済み: Taiga Miyashita 2020 年 7 月 10 日
Aには512×45の行列があります.
そのうちの特定の行のみを取り出して平均を出力したいと考えています.
方法として,2つあると考えています.
①取り出したい列を別のシートに並べて,平均にする
(出したい平均❶は1~10行目,❷は3~15行目...のデータを抜き出して並べ,平均にしたい)
ここでの問題は取り出したい列の数がそれぞれバラバラであるため,1つのシートにまとめられないことです.
異なる数の行列を1つのシートにまとめる方法はございますでしょうか?
②Aから取り出したい行列の数をBにまとめ,Bで指定された行列をAから読み込み,平均にする
Bには❶を求めるために[1,10;3,15]...のようなシートを作り,そこにある行列の位置を抜き出すというイメージです.
Bで指定された行列をAから読み取ることはできるのでしょうか?
for i=1:16
C(i,1)=mean(A(i:i,x))
最終的には平均したデータを一列に並べられるようにしたいです.
よろしくお願いいたします.
  1 件のコメント
madhan ravi
madhan ravi 2020 年 7 月 9 日
If possible can you post it in English with an example and it’s desired output? Translation is not accurate.

サインインしてコメントする。

採用された回答

Takumi
Takumi 2020 年 7 月 10 日
編集済み: Takumi 2020 年 7 月 10 日
①配列サイズが異なる変数を一つの変数に格納したい場合,cell配列を使うと良いと思います.
A = rand(512,45);
B = cell(2,1);
B{1} = A(1:10,:); % Aの1~10行目
B{2} = A(3:15,:); % Aの3~15行目
n = length(B);
meanA = zeros(n,size(A,2)); % Aの行方向平均
for i=1:n
meanA(i,:) = mean(B{i});
end
②指定するインデックスが格納された変数を読み込む場合
A = rand(512,45);
B = {1:10,3:15}; % 読み込みたい行インデックス
n = length(B);
meanA = zeros(n,size(A,2));
for i=1:n
meanA(i,:) = mean(A(B{i},:));
end
  1 件のコメント
Taiga Miyashita
Taiga Miyashita 2020 年 7 月 10 日
Takumi様
ご教授いただきましてありがとうございます.
①において,cell配列を用いて配列サイズが異なる変数を1つの変数に格納することが出来ました.
meanA = zeros(n,size(A,2));
この部分について理解があまり出来ず,このコードを使用するとうまく出来ませんでしたが,使用しないとうまくいきました.
②においては,うまくいかないのですがおそらく①の方法とあまりやり方としては変わらないと思うので,
これからまた考えてみたいと思います.
この度はありがとうございました.

サインインしてコメントする。

その他の回答 (0 件)

タグ

Community Treasure Hunt

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

Start Hunting!