ejemplo - figure title matlab
Matlab: Primer elemento distinto de cero de cada fila o columna (3)
Puede hacerlo ejecutando la función find para cada fila de la siguiente manera:
A = [ -1 0 -2 0 0
2 8 0 1 0
0 0 3 0 -2
0 -3 2 0 0
1 2 0 0 -4];
% make cell of rows
cellOfRows = num2cell(A, 2);
% apply find function for each row
indexOfFirstNonZeroValues = cellfun(@(row) find(row, 1, ''first''), cellOfRows);
indexOfFirstNonZeroValues =
1
1
3
2
1
Por ejemplo,
A = [ -1 0 -2 0 0
2 8 0 1 0
0 0 3 0 -2
0 -3 2 0 0
1 2 0 0 -4];
¿cómo puedo obtener un vector de los primeros elementos distintos de cero de cada fila?
Puedes usar max
:
>> [sel, c] = max( A ~=0, [], 2 );
Las filas para las cuales sel
igualan cero son todos ceros y la columna correspondiente en c
debe ignorarse.
Resultado:
>> [sel c]= max( A~=0, [], 2 )
sel =
1
1
1
1
1
c =
1
1
3
2
1
Para encontrar el primer índice de fila distinto de cero (para cada columna) solo necesita aplicar max
en la primera dimensión:
>> [sel r] = max( A~=0, [], 1 );
Aquí hay una solución basada en accumarray que funcionará incluso si una fila es todo ceros.
A = [ -1 0 -2 0 0
2 8 0 1 0
0 0 3 0 -2
0 -3 2 0 0
1 2 0 0 -4];
[r,c] = find(A);
%# for every row, take the minimum column index and put NaN if none is found
firstIndex = accumarray(r,c,[size(A,1),1],@min,NaN);