Matlab 以下代码有什么问题?

Matlab 以下代码有什么问题?,matlab,for-loop,Matlab,For Loop,我有一个20*120的矩阵。对于矩阵中的每一列,我需要找到所有值之间的最大值,然后对剩余值求和。然后我需要将最大值除以剩余值的总和。我尝试了以下代码,但结果不正确。有什么问题 s = 1:z %z=120 for i = 1:x %x=20 maximss = max(Pres_W); %maximum value InterFss = (sum(Pres_W))-maximss; %remaining values SIRk(:,s

我有一个20*120的矩阵。对于矩阵中的每一列,我需要找到所有值之间的最大值,然后对剩余值求和。然后我需要将最大值除以剩余值的总和。我尝试了以下代码,但结果不正确。有什么问题

s = 1:z      %z=120
for i = 1:x       %x=20
    maximss = max(Pres_W);     %maximum value
    InterFss = (sum(Pres_W))-maximss;     %remaining values
    SIRk(:,s) = (maximss(:,s))./(InterFss(:,s));
end
我将首先提供一个解决方案,解释如何做到这一点,而不是回答“出了什么问题”:

假设我们有一个示例矩阵
m
,如下所示:

m =    
    8    5    9   14   10    7    5
   10    8   12   11    9    9   12
   10    3    7    7    8    4    6
   13   11    6   15   13   11    9
查找每列的最大值:

col_max = max(m, [], 1)
col_max =    
   13   11   12   15   13   11   12
对每列中的所有元素求和,并减去最大值:

col_sum = sum(m, 1) - col_max
col_sum =    
   28   16   22   32   27   20   20
将最大值除以其他元素之和:

col_max ./ col_sum
ans =    
   0.46429   0.68750   0.54545   0.46875   0.48148   0.55000   0.60000
或者,作为一个班轮:

max(m,[],1)./(sum(m,1)-max(m,[],1))
ans =
   0.46429   0.68750   0.54545   0.46875   0.48148   0.55000   0.60000

顺便说一句:您的代码完全按照您的解释执行,它返回最大值除以除最大值以外的所有值


关于最佳实践的注释:

像这样的矢量化,不需要循环

max(m,[],1)
与二维阵列的
max(m)
相同。但是,如果您的矩阵由于某种原因只有一行,它将返回该行的最大值,从而返回单个数字

sum(m,1)
与二维阵列的
sum(m)
相同。但是,如果您的矩阵由于某种原因只有一行,它将返回该行的总和,从而返回一个数字。

我将首先提供一个解决方案,解释如何执行此操作:

假设我们有一个示例矩阵
m
,如下所示:

m =    
    8    5    9   14   10    7    5
   10    8   12   11    9    9   12
   10    3    7    7    8    4    6
   13   11    6   15   13   11    9
查找每列的最大值:

col_max = max(m, [], 1)
col_max =    
   13   11   12   15   13   11   12
对每列中的所有元素求和,并减去最大值:

col_sum = sum(m, 1) - col_max
col_sum =    
   28   16   22   32   27   20   20
将最大值除以其他元素之和:

col_max ./ col_sum
ans =    
   0.46429   0.68750   0.54545   0.46875   0.48148   0.55000   0.60000
或者,作为一个班轮:

max(m,[],1)./(sum(m,1)-max(m,[],1))
ans =
   0.46429   0.68750   0.54545   0.46875   0.48148   0.55000   0.60000

顺便说一句:您的代码完全按照您的解释执行,它返回最大值除以除最大值以外的所有值


关于最佳实践的注释:

像这样的矢量化,不需要循环

max(m,[],1)
与二维阵列的
max(m)
相同。但是,如果您的矩阵由于某种原因只有一行,它将返回该行的最大值,从而返回单个数字


sum(m,1)
与二维阵列的
sum(m)
相同。但是,如果您的矩阵由于某种原因只有一行,它将返回该行的总和,从而返回一个数字。

这是无效的MATLAB代码。另外,我们对
Pres\W
了解多少?它可以有重复的值吗?请提供一个@Dev-iL,这是有效的MATLAB代码。@Studiegriffin差不多,但不完全。它缺少一个关键字的
。即使这可能是一个诚实的复制粘贴错误,我真的希望OPs注意他们上传的内容。由于这个原因,我也没有纠正它。这是无效的MATLAB代码。另外,我们对
Pres\W
了解多少?它可以有重复的值吗?请提供一个@Dev-iL,这是有效的MATLAB代码。@Studiegriffin差不多,但不完全。它缺少一个
关键字的
。即使这可能是一个诚实的复制粘贴错误,我真的希望OPs注意他们上传的内容。因此,我也没有纠正它。