Ich muss einen Vektor von N ganzen Zahlen normalisieren, so dass:
Zum Beispiel:
Wenn ich einen Vektor habe
%Vor%sollte der normalisierte Vektor sein:
%Vor%Ich habe versucht, mit vielen Lösungen in dieser Community und im Internet gefunden und schließlich habe ich es mit diesem Code gemacht:
%Vor%Das Problem funktioniert, wenn:
Aber wenn ich einen anderen Fall habe, obwohl das Ergebnis proportional ist, ist die Summe nicht 0. Zum Beispiel:
%Vor%(Ich bin mir nicht sicher, ob die Zahl korrekt ist, weil ich Matlab momentan nicht benutzen kann, aber ich bin mir sicher, dass die Summe & gt; 1)
istAhy Hinweis?
Vielen Dank im Voraus
... sollte der normalisierte Vektor sein:
v_norm = [0.4, 0.4, 0.2, 0]; % 0.4+0.4+0.2 = 1
Das kommt darauf an. Was ist Ihre Norm Funktion?
norm(x)
in MATLAB gibt die Standardnorm zurück, dh die Summe der Quadrate der Elemente eines normalisierten Vektors x
ist 1.
In Ihrem Beispiel:
%Vor% sum(v_norm .^ 2)
liefert zwar 1, aber sum(v_norm)
nicht wie erwartet.
Ich muss einen Vektor von N ganzen Zahlen normalisieren, so dass jeder Wert proportional zu seinem ursprünglichen Wert ist (der Wert wird zwischen 0 und 1 liegen) und die Summe aller Werte ist 1.
Was meinst du mit " normalisieren "? Bedeutet das Teilen durch einen Wert, der eine gültige mathematische Normfunktion ist, gemäß der Normdefinition ?
Was meinst du mit " proportional "? Bedeutet das, dass alle Elemente mit dieser gleichen Zahl multipliziert werden? Wenn dies der Fall ist und es sich um eine gültige mathematische Norm handelt, können Sie nicht garantieren, dass die Summe der Elemente immer 1 ist.
Betrachten wir zum Beispiel v = [1, -2]
. Dann sum(v) = -1
.
Oder vielleicht ist sum
die Funktion, nach der Sie suchen, aber sie ist nicht mathematisch als Norm zu qualifizieren, weil eine Norm eine Funktion ist, die allen Vektoren in a eine streng positive Länge oder Größe zuweist Vektorraum .
Im obigen Beispiel ist sum(v)
negativ.
Ahy Hinweis?
Sie können wählen zwischen:
sum(x)
, das beide Anforderungen erfüllt, aber nicht als Normfunktion gilt, da es negative Werte ergeben kann. norm(x, 1)
, wie OleThomsenBuus vorgeschlagen, die tatsächlich sum(abs(x(:)))
berechnet. Was Sie tun müssen, ist, glaube ich, Normalisierung mit der 1-Norm ( Taxicab-Norm):
%Vor% Die Variable v_normed
sollte jetzt [0.4, 0.4, 0.2, 0.0]
sein. Die 1-Norm von v_normed
ist gleich 1. Sie können auch den Vektor summieren (ähnlich der 1-Norm, aber ohne die absolute Funktion auf jeden Wert anzuwenden), aber der Bereich dieser Summe liegt zwischen -1 und 1 im allgemeinen Fall (wenn Werte in v
unter 0 liegen). Sie könnten abs
auf die resultierende Summe verwenden, aber mathematisch wird es nicht länger als Norm gelten.