2016-06-09 80 views
1

考虑下面的例子查找索引明智

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 

上面的代码沿每列返回的最大数目的指数等在第一行的最大数量是10第五行,以便Inx(1) = 5 灿我们为查找做同样的事情?像例如,如果我想找到每一行的具体数量让说8

>> find(A == 8) 

ans = 

    27 
    28 
    29 
    33 
    35 
    38 

我将得到指数但不为行明智像我们得到的max()是有一些方法做minipulate找得到那个?或者一些其他的方式

更新:我知道我们可以用[row,col,v] = find(___),但有一个问题,它只会为其中值存在

+0

你想做什么就返回这里的值是不是该利用这样的事实以下当下?我有点困惑,你究竟是什么...... –

+0

喜欢它应该返回0也许或一个南在它的地方 – Umar

+0

啊哈,所以对于每个_row_,你想检查是否有一个数字,如果没有它应该返回0吗?我建议你想一点,如果你真的想要这个,如果你试图使用这些指数,你会得到错误... –

回答

3

你可以简单地转换A为逻辑行矩阵,其中它是1,如果等于80,否则。然后,您可以使用第二个输出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 
+0

完美的是什么我正在寻找:) – Umar

+0

感谢您的更新,它使得它更容易理解 – Umar

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 
+0

它与使用[row,col,v] = find(___):)相同:) – Umar