Очень простой способ сделать это - использовать функцию НАЙТИ примерно так:
[index,~] = find(Binary.'); %'# Transpose the matrix and find the row indices
%# of the non-zero entries
И вы можете проверить, что он работает следующим образом:
>> Binary(:,index)
ans =
1 0 0 0 0 %# Yup, that's an identity matrix alright!
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
СТАРЫЙ ПОДХОД:
Это не так компактно или эффективно, как в приведенном выше решении, но вы также можете транспонировать матрицу и использовать SORTROWS для сортировки столбцов (теперь транспонированных в строки) и возврата индексов сортировки. Это на самом деле будет сортировать значения в порядке возрастания, что даст вам антидиагональную матрицу, поэтому вам нужно будет перевернуть вектор индексов, используя FLIPUD . Вот код:
[~,index] = sortrows(Binary.'); %'# Transpose and sort the matrix
index = flipud(index); %# Flip the index vector