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

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

Accepted Answer

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

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 1 Dec 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.

Categories

Find more on データ型の変換 in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!