Azzera filtri
Azzera filtri

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

40 visualizzazioni (ultimi 30 giorni)
R
R il 19 Nov 2022
Commentato: R il 19 Nov 2022
サイズが 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サイズがもう少し大きく、よい書き方がわかりません。
説明が下手ですが、ご教授いただければと思います。

Risposta accettata

交感神経優位なあかべぇ
例として、セルの変数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 Commento
R
R il 19 Nov 2022
回答ありがとうございます。
自分のプログラムでも動くことを確認できました。

Accedi per commentare.

Più risposte (1)

Atsushi Ueno
Atsushi Ueno il 19 Nov 2022
Modificato: Atsushi Ueno il 19 Nov 2022
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 Commenti
Atsushi Ueno
Atsushi Ueno il 19 Nov 2022
>上記のように計算させることは可能でしょうか?
はい可能です。質問の解釈に誤りがあり申し訳ございません。回答を変更しました。
R
R il 19 Nov 2022
回答ありがとうございます。
cellのままでも計算できるということですね。

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!