xlabel ejemplo matlab matrix sparse-matrix sparse-array

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);