如何根据值返回行

  • 本文关键字:返回 何根 matlab
  • 更新时间 :
  • 英文 :


我使用的是MATLAB R2011b,在返回基于值的行时遇到问题。我有两个.txt文件,其中的数据格式为:

A:

1901    1.0     0.9    1.4   3.0    3.9   8.3    9.5     9.4    8.8     6.6   4.1   1.7
1902    0.3     2.4    1.5   3.7    5.1   8.3    10.4    10.3   7.6     5.9   2.7   0.7
1903    0.6     0.1    0.7   2.6    4.4   7.6    9.3    10.1    7.9     4.7  -0.7   1.2

B:

1901    5.9  7.0   8.2   10.5   14.3    17.1    17.6    18.6    16.5    13.2    10.2  6.6
1902    5.4  8.6   8.2   13.5   13.8    17.9    18.8    19.3    16.8    12.9    8.9   6.1
1903    5.3  6.1   7.7   11.0   14.3    18.0    17.5    18.1    16.6    11.9    5.8   6.5

如果我使用:

D = [A(:,1), (B(:,2:13)-A(:,2:13))]并得到:

1.901   0.0049  0.0061  0.0068  0.0075  0.0104  0.0088  0.0081  0.0092  0.0077  0.0066  0.0061  0.0049
1.902   0.0051  0.0062  0.0067  0.0098  0.0087  0.0096  0.0084  0.009   0.0092  0.007   0.0062  0.0054
1.903   0.0047  0.006   0.007   0.0084  0.0099  0.0104  0.0082  0.008   0.0087  0.0072  0.0065  0.0053

我希望D是:

1901    4.9     6.1  6.8    7.5   10.4   8.8     8.1    9.2  7.7    6.6  6.1    4.9
1902    5.1     6.2  6.7    9.8   8.7    9.6     8.4    9.0  9.2    7.0  6.2    5.4
1903    4.7     6.0  7.0    8.4   9.9    10.4    8.2    8.0  8.7    7.2  6.5    5.3

然后,我想返回具有最大值的行(以列D(:,2:end)为单位(。在这种情况下,因为10.4出现在两次:

1903    4.9  6.1    6.8  7.5    10.4    8.8     8.1     9.2   7.7    6.6    6.1  4.9
1905    4.7  6.0    7.0  8.4    9.9     10.4    8.2     8.0   8.7    7.2    6.5  5.3

我尝试过:[Values, Rows] = max(max(max(D(:, 2:end), [], 13)))但我只得到最大值,即10.4

有人能帮忙吗?

您调用'max'错误。你能做的是:

[maxVal, idx] = max(D(:, 2:end), [], 'all', 'linear'); % returns the linear index of the max value
[rows, cols] = ind2sub(size(D(:, 2:end)), idx); % returns the row index and column index of the max value
D(rows, :) % show the row(s) with the max value

请注意,列索引指的是矩阵D(:, 2:end),而不是原始矩阵。因此,在这种情况下,实际列索引将是cols + 1

至于为什么你的矩阵D看起来是错误的,那是因为我假设它前面有一个1.0e+03 *。你肯定可以用format short之类的东西来修改这种行为。

编辑以前版本的MATLAB:

对于以前不存在"线性"标志的Matlab版本,您可以执行以下操作:

maxVal = max(D(:, 2:end), [], 2); % get the max value in each row
rows = find(maxVal == max(maxVal)); % find ALL rows that have the same maximum value
D(rows, :)

新编辑:

maxVal = max(D(:, 2:end), [], 2);
rows = [];
for i = 1:size(D, 1)
if (any(D(i, 2:end) == maxVal))
rows = [rows, i];
end
end
D(rows, :)

或者,在any()还不存在的情况下,用这个代替for循环

for i = 1:size(D, 1)
for j = 2:size(D, 2)
if (D(i, j) == maxVal)
rows = [rows, i];
break
end
end
end

相关内容

  • 没有找到相关文章

最新更新