2013-03-30 6 views
4

Для каждого столбца матрицы A, состоящего из «0» и «1», я хотел бы найти индексы столбцов первого вхождения из '1', если существует. Например, если А определяется как:Matlab: найдите индекс строки первого вхождения для каждого столбца матрицы (без использования циклов)

A=[0 0 0 0; 
0 0 0 1; 
0 0 0 0; 
0 0 0 1; 
1 0 0 0; 
0 1 0 1; 
1 1 0 0] 

тогда результат будет:

b=[5 6 2] 

Я ищу решение без каких-либо «за» или «а» петли.

Одно решение, которое я придумал:

[b,~]=find(cumsum(cumsum(A))==1) 

Есть ли более элегантный способ сделать это?

ответ

4

Это короче, чем что-либо, и это один вкладыш. Код:

[~,idx] = max(A(:,sum(A)>0)); 

Выход:

idx = 

    5  6  2 

EDIT: Просто понял, что вы можете сделать:

[~,idx] = max(A(:,any(A))) 
+0

это оленья кожа сказать, какой столбец имеет элемент в IDX принадлежит –

4

@Nacer - хороший ответ. По умолчанию [a, m, c] = unique (J) возвращает вектор m для индексации последнего появления каждого уникального значения в J. Вместо этого используйте [~,m] = unique(J, 'first');.

[I,J] = find(A==1); 
[~,m] = unique(J, 'first'); 
I(m) 

ans =  
    5 
    6 
    2 

 Смежные вопросы

  • Нет связанных вопросов^_^