Borrar filtros
Borrar filtros

How to normalize rows of a matrix?

4 visualizaciones (últimos 30 días)
Kimberly Cardillo
Kimberly Cardillo el 19 de Ag. de 2020
Respondida: Steven Lord el 19 de Ag. de 2020
I have a matrix called aefm_1 that is 184 x 5119 where each row indicates a signal vector and each column is a time step and each value in the signal vector indicates amplitude at that time step. I want to write a loop that normalizes each signal vector in the matrix from -1 to 1 based on the maximum amplitude for each row. When I try to use the code below, it outputs only a singal vector of dimensions 1 x 5119. In the end, I want an output that is still 184 x 5119. How do I do that?
for i=1:size(aefm_1,1)
aefm_2 = aefm_1(i,:)./max(abs(aefm_1(i,:)));
end

Respuesta aceptada

Geoff Hayes
Geoff Hayes el 19 de Ag. de 2020
Kimberley - your code is overwriting the value that was assigned to aefm_2 on the previous iteration
aefm_2 = aefm_1(i,:)./max(abs(aefm_1(i,:)));
You will need to set this variable to be an array with the same dimensions as aefm_1 and then update each row of it. Alternatively, you could probably do this in a single line of code without a loop.
aefm_2 = aefm_1 ./ max(abs(aefm_1), [], 2);
See here for why we add the [] and 2 paramaters as inputs to max.

Más respuestas (1)

Steven Lord
Steven Lord el 19 de Ag. de 2020
Are you required to use a loop? If not, take a look at the normalize function.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by