考虑以下示例
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()
但是有一个问题是它只返回值存在的行
答案 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