Tengo un problema siguiente: tengo una matriz de A de tamaño 16×22440.

Lo que tengo que hacer es normalizar cada fila de esta matriz, de modo que la norma de cada uno de ellos es igual a 1 (for n=1:16 norm(A(n,:))==1)

¿Cómo puedo lograr que en matlab?

Editar:
Cada fila de esta matriz es un vector creado de una 160×140 de la imagen y por lo tanto debe ser considerado por separado. Los valores tienen que ser normalizada para crear una matriz de eigenfaces.

  • lo norm? L2? L1?
  • Eucleadian norma es el caso.
  • entonces mi respuesta debería ser útil para usted.
InformationsquelleAutor Jacka | 2013-05-12

2 Comentarios

  1. 3

    Hace la instalación de Matlab incluye la Red Neuronal caja de herramientas? Si es así, tratar normr:

    nA = normr(A);

    De lo contrario, @Shai la solución es bueno, salvo que no se manejar infinito o NaN entradas – es mucho más seguro para comprobar indefinido norma casos después:

    nA = bsxfun(@rdivide,A,sqrt(sum(A.^2,2)));
    nA(~isfinite(nA)) = 1; % Use 0 to match output of @Shai's solution, Matlab's norm()

    Tenga en cuenta que la normalización de la longitud cero (zero componentes) o de longitud infinita vector (uno o más componentes +Inf o -Inf), o uno con un NaN componente no está muy bien definido. La solución anterior devuelve todos los queridos, como de Matlab normr función. Matlab es norma función, sin embargo, exhibe un comportamiento diferente. Puede que desee especificar un comportamiento diferente, por ejemplo, una advertencia o un error, todos los ceros, Nan, los componentes de la escala por la longitud del vector, etc. Este hilo habla de la cuestión de longitud cero vectores, hasta cierto punto: ¿Cómo se puede normalizar el vector cero?.

    • Gracias, me alegro de averiguar acerca de la manera más fácil de hacerlo!
  2. 3

    En primer lugar, calcular la norma (supongo Eucleadian norma aquí)

    n = sqrt( sum( A.^2, 2 ) );
    % patch to overcome rows with zero norm
    n( n == 0 ) = 1;
    nA = bsxfun( @rdivide, A, n ); % divide by norm
    • Bueno, después de usar el código de las normas de cada fila se ~0, en lugar de 1: 8.6903 e-05; 1.3841 e-04 1.6891 e-04 2.0224 e-04; 3.5168 e-04; 4.0101 e-04 5.7108 e-04; 6.3513 e-04; 6.6574 e-04; 8.1582 e-04; 8.5704 e-04; 8.7563 e-04; 0.0010; 0.0012; 0.0015; 0.0017;
    • olvidó tomar sqrt de la norma. A ver si mis fix funciona ahora.
    • Sí, ahora funciona, muchas gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here