cell内の数値に対​して計算するにはどう​すればいいですか?

サイズが 3×1 cell の数値が入った関数 D があり、下記に示す計算をしたいと考えています。
1×1のcellに対して
A1 = 20 ./ D (Dは1×1部分の数値)
2×1のcellに対して
A2 = 21 ./ D (Dは2×1部分の数値)
3×1のcellに対して
A3 = 22 ./ D (Dは3×1部分の数値)
X = (A1+A2+A3) ./ 3
実際はcellサイズがもう少し大きく、よい書き方がわかりません。
説明が下手ですが、ご教授いただければと思います。

 Akzeptierte Antwort

2 Stimmen

例として、セルの変数Dの要素を10にして、作成します。
N = 10;
D = num2cell(rand(N, 1))
D = 10×1 cell array
{[0.2222]} {[0.5270]} {[0.2118]} {[0.3078]} {[0.2657]} {[0.9345]} {[0.8348]} {[0.5382]} {[0.9156]} {[0.8574]}
数値が入ったセル配列はcell2matで数値化できます。
DNum = cell2mat(D)
DNum = 10×1
0.2222 0.5270 0.2118 0.3078 0.2657 0.9345 0.8348 0.5382 0.9156 0.8574
Aを算出する分子とする連番を作成します。
seriesNum = (0 : length(D) - 1)';
numerators = 20 + seriesNum
numerators = 10×1
20 21 22 23 24 25 26 27 28 29
Dのそれぞれの要素に対して割り算してから平均Xを求めます。
A = numerators ./ DNum; % 変数AはA1 ~ A10までの数値が格納された配列
X = mean(A)
X = 57.1220

1 Kommentar

R
R am 19 Nov. 2022
回答ありがとうございます。
自分のプログラムでも動くことを確認できました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Atsushi Ueno
Atsushi Ueno am 19 Nov. 2022
Bearbeitet: Atsushi Ueno am 19 Nov. 2022

3 Stimmen

cellfun関数とmean関数を使いました。途中で演算結果をセル配列から行列に変え、平均値を求めています。
>サイズが 3×1 cell の数値が入った関数 D があり
数値はスカラ、「関数 D」は関数ではなく変数であると認識してます。誤認識あればお知らせ願います。
(追記)除数と被除数の両方がセル配列だったので、2つの引数を持つcellfun関数に変更しました
D = {1;3;2}; % 除数
N = {20;21;22}; % 被除数
%A = cellfun(@(x) 20 ./ x, D) % 1×1のcellに対して...ではなく 3×1 cell 全体に対して
A = cellfun(@(x,y) y ./ x, D, N) % 1×1のcellに対して...ではなく 3×1 cell 全体に対して
A = 3×1
20 7 11
X = mean(A)
X = 12.6667

3 Kommentare

R
R am 19 Nov. 2022
回答ありがとうございます。
変数でした。すみません。
コードの2行目に関してなのですが、数値 20 の部分を
1×1に関しては20、2×1に関しては21、3×1に関しては22、...
といった感じに1ずつ増やしたいです。
上記のように計算させることは可能でしょうか?
Atsushi Ueno
Atsushi Ueno am 19 Nov. 2022
>上記のように計算させることは可能でしょうか?
はい可能です。質問の解釈に誤りがあり申し訳ございません。回答を変更しました。
R
R am 19 Nov. 2022
回答ありがとうございます。
cellのままでも計算できるということですね。

Melden Sie sich an, um zu kommentieren.

Kategorien

Produkte

Version

R2022b

Community Treasure Hunt

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

Start Hunting!