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

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

采纳的回答

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

更多回答(1 个)

Atsushi Ueno
Atsushi Ueno 2021-12-1
%% サンプルデータの作成
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.

类别

Help CenterFile Exchange 中查找有关 データ型の変換 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!