Matlab 以下代码有什么问题?
我有一个20*120的矩阵。对于矩阵中的每一列,我需要找到所有值之间的最大值,然后对剩余值求和。然后我需要将最大值除以剩余值的总和。我尝试了以下代码,但结果不正确。有什么问题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
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注意他们上传的内容。因此,我也没有纠正它。