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

235 views (last 30 days)
Taiga Miyashita
Taiga Miyashita on 9 Jul 2020
Commented: Taiga Miyashita on 10 Jul 2020
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 Comment
madhan ravi
madhan ravi on 9 Jul 2020
If possible can you post it in English with an example and it’s desired output? Translation is not accurate.

Sign in to comment.

Accepted Answer

Takumi
Takumi on 10 Jul 2020
Edited: Takumi on 10 Jul 2020
①配列サイズが異なる変数を一つの変数に格納したい場合,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 Comment
Taiga Miyashita
Taiga Miyashita on 10 Jul 2020
Takumi様
ご教授いただきましてありがとうございます.
①において,cell配列を用いて配列サイズが異なる変数を1つの変数に格納することが出来ました.
meanA = zeros(n,size(A,2));
この部分について理解があまり出来ず,このコードを使用するとうまく出来ませんでしたが,使用しないとうまくいきました.
②においては,うまくいかないのですがおそらく①の方法とあまりやり方としては変わらないと思うので,
これからまた考えてみたいと思います.
この度はありがとうございました.

Sign in to comment.

More Answers (0)

Categories

Find more on 行列および配列 in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!