arrays - una - vectores y matrices definicion
Encontrar el índice del último elemento distinto de cero en cada fila de una matriz determinada? (4)
Aquí hay una versión más corta, que combina find y accumarray
x = [ 0 9 7 0 0 0; 5 0 0 6 0 3; 0 0 0 0 0 0; 8 0 4 2 1 0 ];
%# get the row and column indices for x
[rowIdx,colIdx] = find(x);
%# with accumarray take the maximum column index for every row
v = accumarray(rowIdx,colIdx,[],@max)''
v =
3 6 0 5
Para una matriz de tamaño arbitrario x
, ¿cómo puedo encontrar el índice del último elemento distinto de cero en cada fila de una matriz dada?
Por ejemplo, para la matriz
x = [ 0 9 7 0 0 0; 5 0 0 6 0 3; 0 0 0 0 0 0; 8 0 4 2 1 0 ]
el vector [ 3 6 0 5 ]
debe ser obtenido.
Aquí hay una versión:
x = [ 0 9 7 0 0 0; 5 0 0 6 0 3; 0 0 0 0 0 0; 8 0 4 2 1 0 ];
c = arrayfun(@(k) find(x(k,:)~=0,1,''last''), 1:size(x,1), ''UniformOutput'',false);
c( cellfun(@isempty,c) ) = {0};
v = cell2mat(c);
v =
3 6 0 5
EDITAR : Considere esta solución alternativa:
[m,v] = max( cumsum(x''~=0) );
v(m==0) = 0;
v =
3 6 0 5
Mi respuesta es un poco retorcida, pero debería funcionar también
x = [ 0 9 7 0 0 0; 5 0 0 6 0 3; 0 0 0 0 0 0; 8 0 4 2 1 0 ];
[~,pos] = max([fliplr(x~=0),ones(size(x,1))],[],2);
v = size(x,2)-pos'' +1;