vectores una suma seleccionar matriz matrices matematicas manipulacion llenar lineal extraer elementos definicion arrays matlab matrix

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;


Solución de una línea con bsxfun :

result = max(bsxfun(@times, x~=0, 1:size(x,2)).'');

O use las dos salidas de max :

[val, result] = max(fliplr(x~=0).'',[],1); %'' result = (size(A,2)+1-result).*val;