行列範囲を指定して合計値を算出したい

15 visualizzazioni (ultimi 30 giorni)
Raki Kawama
Raki Kawama il 1 Dic 2021
Risposto: Raki Kawama il 1 Dic 2021
20行×6列からなるデータ(data)から、1列目全体を指定して、合計値を算出したいです。
現在、以下の構文を用いているのですが1行目の1列目しか指定できません。
A = data{:,1};
Atotal = sum(data);
A = data(:,1);とした場合だと1列目全体の指定が可能なのですが、sumにする際に「データ型が無効です。最初の引数は数値または論理値でなければなりません。」とエラーが出てしまいます。
Matlab初心者で大変恐縮ですが、よろしくお願いいたします。

Risposta accettata

Raki Kawama
Raki Kawama il 1 Dic 2021
おかげさまで解決致しました。ベクトルに変換する必要があったのですね。ありがとうございました!

Più risposte (1)

Atsushi Ueno
Atsushi Ueno il 1 Dic 2021
%% サンプルデータの作成
data = num2cell(rand(3).*100) % 20行×6列ではなく3行×3列に減らしています
data = 3×3 cell array
{[ 2.4495]} {[ 7.9103]} {[34.7330]} {[24.2879]} {[76.9501]} {[ 6.8046]} {[29.7363]} {[63.1590]} {[19.9963]}
%%【方法1】cell2mat関数でセル配列を行列(orベクトル)に変換する
A = cell2mat(data(:,1))
A = 3×1
2.4495 24.2879 29.7363
Atotal = sum(A)
Atotal = 56.4737
%%【方法2】cat関数でセルの中身data{:,1}を結合する
A = cat(1,data{:,1}) % cat関数の他に[data{:,1}]'と言う書き方もある
A = 3×1
2.4495 24.2879 29.7363
Atotal = sum(A)
Atotal = 56.4737
%%【参考】質問のエラーを再現
A = data(:,1) % data(:,1)とした場合だと1列目全体の指定が可能なのですが
A = 3×1 cell array
{[ 2.4495]} {[24.2879]} {[29.7363]}
Atotal = sum(A) % sumにする際に「データ型が無効です。最初の引数は数値または論理値でなければなりません。」とエラーが出てしまいます。
Error using sum
Invalid data type. First argument must be numeric or logical.

Categorie

Scopri di più su Logical in Help Center e File Exchange

Prodotti


Release

R2021b

Community Treasure Hunt

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

Start Hunting!