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

조회 수: 15 (최근 30일)
Raki Kawama
Raki Kawama 2021년 12월 1일
답변: 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에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!