如何在Matlab中计算这个总和?

时间:2014-06-11 10:30:25

标签: matlab sum

如何以紧凑的方式在Matlab中计算这个总和? (n是与每个s相关的值)

Image

我做了:

  NUM = 0;
  DEN = 0;
  max_s = max(s);

  for f = 1 : length(s)
     n = sum(s == s(f));
     if (s(f) ~= max_s)
         NUM = NUM + s(f) * s(f) * n;
     end
     DEN = DEN + s(f) * n;
  end

  result = NUM / DEN; 

2 个答案:

答案 0 :(得分:3)

假设s是一个向量,n是一个与s长度相同的向量,那么总和

sel = s < max(s(:)); % select relevant entries 
sum( n( sel ) .* s(sel).^2 ) ./ sum( s.*n )
您的示例n=sum( bsxfun( @eq, s, s' ), 1 )中的

请注意,您可以使用点积来cumpute sum( x .* y ) = x(:)' * y(:) 但是,当你使用这个技巧时,你需要小心矢量的维度,否则你会发现自己计算外部产品......

答案 1 :(得分:0)

对于n的具体定义,您可以使用histunique

us = unique( s );
n = hist( s, us ); %// count 
sel = us < max(us);
row = @(x) x(:).'; %//' convert to row vector
col = @(x) x(:); %// convert to col vector
result = ( row( us(sel).^2 ) * col( n(sel).^2 ) ) / ( row( us ) * col( n.^2 ) )

我的两个答案的比较可以在ideone找到。