如何在Matlab中计算这个和?
如何在Matlab中以紧凑的方式计算该和?(n是与每个s相关的值) 我已经做了:如何在Matlab中计算这个和?,matlab,sum,Matlab,Sum,如何在Matlab中以紧凑的方式计算该和?(n是与每个s相关的值) 我已经做了: 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 = NU
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;
假设
s
是一个向量,n
是一个与s
长度相同的向量,那么
sel = s < max(s(:)); % select relevant entries
sum( n( sel ) .* s(sel).^2 ) ./ sum( s.*n )
sel=s
在您的示例中,n=sum(bsxfun(@eq,s,s'),1)
请注意,您可以使用点积计算sum(x.*y)=x(:)'*y(:)
然而,当你使用这个技巧时,你需要小心向量的维数,否则你会发现自己在计算外积….对于
n
的具体定义,你可以使用hist
和unique
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 ) )
us=unique(s);
n=历史(美国、南部);%//计数
sel=美国<最大值(美国);
行=@(x)x(:).;%/'转换为行向量
列=@(x)x(:);%//转换为列向量
结果=(第(美国)行第^2列第(n)列第^2列)/(第(美国)行第^2列)
我的两个答案的比较可以在上找到。对不起,我在重新键入代码时出错,我编辑了。该标量类型为n。您确定
n
?如果在s
中有一个元素出现两次,则每次将其与2相乘时,将其求和两次。n被定义为s中s(i)的数量。。。(我作为迭代索引)对不起,我又编辑了一次:n是一个标量,它是其中s(f)的计数s@misiMe我还编辑了我的答案以反映这一变化n
不是标量,而是与s
长度相同的向量,您对每个s(f)
@Shai使用不同的n
,什么是num
?你的意思大概是说,我现在知道我的答案和这个一样了。删除它你的两个答案相等吗?@misiMe他们相等,请看我的表意文字比较。