matrices loop for matlab loops matrix

matrices - for loop matlab



¿Cómo puedo dividir cada fila de una matriz por una fila fija? (3)

Ahora puede usar operaciones de matriz frente a matriz .

Esto hará el truco:

mat = [100 200 300 400 500 600 1 2 3 4 5 6 10 20 30 40 50 60]; result = mat ./ mat(2,:)

que dará salida:

result = 100 100 100 100 100 100 1 1 1 1 1 1 10 10 10 10 10 10

Esto funcionará en Octave y Matlab desde R2016b.

Supongamos que tengo una matriz como:

100 200 300 400 500 600 1 2 3 4 5 6 10 20 30 40 50 60 ...

Deseo dividir cada fila por la segunda fila (cada elemento por el elemento correspondiente), así obtendré:

100 100 100 100 100 100 1 1 1 1 1 1 10 10 10 10 10 10 ...

Hw puedo hacerlo (sin escribir un bucle explícito)?


Aquí hay un par de formas más equivalentes:

M = [100 200 300 400 500 600 1 2 3 4 5 6 10 20 30 40 50 60]; %# BSXFUN MM = bsxfun(@rdivide, M, M(2,:)); %# REPMAT MM = M ./ repmat(M(2,:),size(M,1),1); %# repetition by multiplication MM = M ./ ( ones(size(M,1),1)*M(2,:) ); %# FOR-loop MM = zeros(size(M)); for i=1:size(M,1) MM(i,:) = M(i,:) ./ M(2,:); end

La mejor solución es la que usa BSXFUN (publicada por @Itamar Katz )


Use bsxfun :

outMat = bsxfun (@rdivide, inMat, inMat(2,:));

El primer argumento para bsxfun es un manejador de la función que desea aplicar, en este caso, división derecha.