按行查找特定数字的索引

时间:2016-06-09 16:12:25

标签: matlab

考虑以下示例

queue

上面的代码返回每列的最大数量的索引,就像第一行中的最大数字是第5行的10,所以A = 6 9 4 7 10 3 6 5 5 9 10 4 9 8 6 10 6 3 4 6 6 3 3 8 6 6 4 4 4 5 5 10 8 5 7 10 10 8 8 7 5 7 8 9 9 3 3 6 3 9 [~,Inx] =max(A, [],2) Inx = 5 5 1 1 4 1 2 1 4 5 我们能找到相同的东西吗?例如,如果我想在每一行中找到一个特定的数字,那就说8

Inx(1) = 5

我会得到索引但不是像我们得到的那样>> find(A == 8) ans = 27 28 29 33 35 38 是否有一些方法可以做到minipulate find来获得它?或者其他一些方式

更新:我知道我们可以使用max()但是有一个问题是它只返回值存在的行

2 个答案:

答案 0 :(得分:3)

您可以简单地将A转换为逻辑矩阵,如果等于1则为8,否则为0。然后,您可以使用max的第二个输出来查找包含每行中第一个8的列。如果某行不包含任何8,则max的第一个输出将为0,第二个输出将为1。 您可以将第一个和第二个输出相乘,将这些没有8的行清零。

[has8, col] = max(A == 8, [], 2);

% Zero out any rows that didn't contain an 8
result = has8 .* col;

%   0
%   0
%   4
%   0
%   4
%   0
%   3
%   3
%   3
%   0

如果你想要NaN而不是0,你可以执行以下操作:0/0 == NaN

result = has8 .* col ./ has8;

%   NaN
%   NaN
%     4
%   NaN
%     4
%   NaN
%     3
%     3
%     3
%   NaN

答案 1 :(得分:0)

Inx = zeros(size(A,1),1); % initialize with default values
[row,col,v] = find(A==8); % find the proper indices
Inx(row) = col; % insert values