フィルターのクリア

how to sum value of fields on struct?

123 ビュー (過去 30 日間)
fred bnm
fred bnm 2016 年 10 月 26 日
回答済み: Karol Ondrejkovic 2023 年 3 月 28 日
i have a struct in size 1000*1 with 2 fields.how to sum value of fields? my code:(s is struct)
sum1 = sum(s.Fields1(1:end));
  2 件のコメント
KSSV
KSSV 2016 年 10 月 26 日
Did that work? You got any error?
fred bnm
fred bnm 2016 年 10 月 27 日
no but i cant obtain sum of values in the fields.

サインインしてコメントする。

回答 (4 件)

KSSV
KSSV 2016 年 10 月 26 日
s = struct ;
for i = 1:100
s(i).a = rand(1) ;
s(i).b = i ;
end
suma = sum([s(:).a]) ;
sumb = sum([s(:).b]) ;
  1 件のコメント
khuat quanghuy
khuat quanghuy 2018 年 9 月 19 日
thanks.

サインインしてコメントする。


Andrei Bobrov
Andrei Bobrov 2016 年 10 月 26 日
編集済み: Andrei Bobrov 2016 年 10 月 26 日
z = struct2cell(s(:));
out = sum(reshape([z{:}],size(z)),2);
or general variant
z = cellfun(@(x)x(:)',struct2cell(s(:)),'un',0);
out = arrayfun(@(ii)sum([z{ii,:}]),(1:size(z,1))');

sourav  malla
sourav malla 2019 年 7 月 4 日
You can do it with a for loop like this:
sum1=0;
for i=1:length(s)
sum1=sum1+s(i).fieldname
end
or you can directly do like this:-
sum1=sum([s(:).fieldname])

Karol Ondrejkovic
Karol Ondrejkovic 2023 年 3 月 28 日
s = struct; % create a scalar (1-by-1) structure with no fields
N = 1000; % number of fields to be created
for i = 1 : N
s(i).a = i + 1; % s(1).a = 2; s(2).a = 3; s(3).a = 4; ... ; s(N).a = 1001; (fill "a" fields with scalar values)
s(i).b = i; % s(1).b = 1; s(2).b = 2; s(3).b = 3; ... ; s(N).b = 1000; (fill "b" fields with scalar values)
end
% Sumation of scalar values:
c = struct2cell(s); % convert (1 by N) struct to (2 by 1 by N) cell array
ca_sum = sum([c{1,1,:}], 2); % sum of the elements in the "a" fields
cb_sum = sum([c{2,1,:}], 2); % sum of the elements in the "b" fields
c_sum = sum([c{:}]); % sum of the elements in the "a+b" fields

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by