J'ai un tableau:
list = [[2310.01, 2640.14, 2710.63, 2926, 2700.12], [2014.45, 2160, 2430.65, 2700.65, 2714.63]]
J'ai besoin de normaliser chaque ligne dans une liste 2D entre (min=-.1, max=.1)
. Toutes les méthodes peuvent normaliser les données entre [0,1]
ou [-1,1]
. Mais, comme j'ai un tableau 2D, je dois normaliser chaque ligne entre une valeur min / max, par exemple: (-.1, .1)
.
J'utilise Python et MATLAB, j'espère pouvoir obtenir des réponses avec python ou matlab.
4 Réponses :
Dans MATLAB, vous pouvez le faire comme suit:
Normaliser à la plage [-1, 1]:
lo_out = -0.1 hi_out = 0.1 range_out = hi_out - lo_out %Normalize to range [0, 1]: %norm_list = (list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2)) %Normalize to range [lo_out, hi_out]: lo_in = min(list, [], 2); %Minimum of each row hi_in = max(list, [], 2); %Maximum of each row range_in = hi_in - lo_in; %Range of each row norm_list = ((list - lo_in) ./ range_in) * range_out + lo_out
Pas la meilleure solution, mais la plus rapide à laquelle j'ai pensé ...
Mise à jour - normalisation à la plage de destination générale:
norm_list = ((list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2)))*2 - 1
Le moyen le plus simple sera de faire une normalisation min-max
np.array(list) array = list[:] - np.min(list) / (np.max(list) - np.min(list)) array = 2*array - 1
Maintenant, le tableau est normalisé entre -1 et 1
J'ai besoin de normaliser chaque ligne entre une valeur min / max ex: (-.1, .1)
Dans R2018a et versions ultérieures, vous pouvez utiliser la fonction de normalisation directement dans MATLAB pour ce faire.
A = magic(3) A = 8 1 6 3 5 7 4 9 2 normalize(A,2,'range',[-1 1]) ans = 1.0000 -1.0000 0.4286 -1.0000 0 1.0000 -0.4286 1.0000 -1.0000
Il y a une grande fonction dans Matlab appelée "mapminmax" développée pour ce travail.
x = (mapminmax('reverse',x_normalized',PS))' % Obtaining the true value of x.
La fonction examine les lignes, c'est pourquoi nous devons faire l'opération x 'car nous voulons normaliser en fonction des colonnes. Le paramètre PS représentera les paramètres requis lorsque nous voulons le convertir en valeur réelle avant la normalisation.
x=data; [x_normalized, PS]=mapinmax(x',0,1); % It makes normalization in the range of 0-1. x_normalized=x_normalized';