Loading [MathJax]/extensions/TeX/mathchoice.js

1 votos

¿Cómo normalizar e invertir un vector para que sume 1?

Entiendo cómo funciona la normalización. Sumas los valores individuales del vector, divides cada valor por la suma, y voilá... suman 1.

¿Por qué no funciona cuando los restas de 1? Si todos los valores suman 1 después de la normalización, entonces los ratios no deberían funcionar así (1 - X_1).sum() == 1 ?

¿Qué estoy haciendo mal? Básicamente quiero que los valores más pequeños tengan un mayor peso al final. Donde un valor de 0.0 sería 100% (es decir, 1,0).

# Python 3 with NumPy
X = np.array([[ 58.50853002,  74.73077551,  54.46120887,  55.55526553],
              [ 68.14133201,  22.2475803 ,  88.79126866,  86.24927424],
              [ 43.86150599,  75.99344646,  81.90051932,  50.66885662],
              [ 74.81149378,  82.86920509,  36.75953127,  58.42956957]])

# Get 2nd row
X_1 = X[1,:]
# array([ 68.14133201,  22.2475803 ,  88.79126866,  86.24927424])

# Get ratios for row
ratios = X_1/X_1.sum()
#array([ 0.25672106,  0.0838173 ,  0.33451927,  0.32494236])

# Sum to 1
ratios.sum()
# 1.0

# Shouldn't this work? 
(1 - ratios)
# array([ 0.74327894,  0.9161827 ,  0.66548073,  0.67505764])

# But it doesn't...
(1 - ratios).sum()
#3.0

0 votos

No programo, así que no puedo discutir tu código. Pero cuando normalizas un vector, normalmente sumas los cuadrados, sacas la raíz cuadrada. Y dividir por esta norma.

1voto

Gudmundur Orn Puntos 853

No hay ninguna razón para esperar 1 - ratios para dar lugar a un vector donde la suma de los elementos es 1 .

En particular, si se tiene la matriz inicial [a,b,c,d] con a+b+c+d=1 entonces 1[a,b,c,d]=[1a,1b,1c,1d] (donde uso la igualdad en el sentido de numpy). Cuando sumas estos elementos, obtienes 1a+1b+1c+1d=4(a+b+c+d)=41=3 .

Así que siempre obtendrá (dimension of vector1) después de esta operación.

0 votos

Terminé haciendo. (1/X_1) / sum(1/X_1) así que los valores más pequeños tienen un peso mayor al final y todos suman 1. ¿Tiene sentido hacerlo así?

0 votos

No estoy seguro de lo que intentas hacer. Si lo intentas, tendrás que manejar la división por cero de alguna manera.

0 votos

¡buena idea! puedo añadir un pseudo recuento como + 0.000001

1voto

mvw Puntos 13437

Permítame intentar entender lo que está haciendo:

Se suman los valores individuales del vector, se divide cada valor por la suma, y voilá... suman 1.

Primero la suma: S(x)=ixi A continuación, la normalización descrita: x=x/S(x) Así que S(x)=ixi=ixiS(x)=1S(x)ixi=1S(x)S(x)=1 Bien, el vector normalizado x tiene suma unitaria. (Cuidado: si S(x) era cero, te vas a llevar una sorpresa)

¿Por qué no funciona al restarlos a 1? Si todos los valores suman 1 después de la normalización, ¿entonces no deberían funcionar los cocientes de manera que (1 - X_1).sum() == 1?

Bien, si tenemos el nuevo vector y con yi=1xi entonces obtenemos S(yi)=iyi=i(1xi)=(i1)(ixi)=nS(x)=n1 Así que, a menos que n=2 (dos componentes en el vector), esto no devolvería un vector y con la suma 1 .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X