Strumenti Utente

Strumenti Sito


rappresentazioni_vettoriali

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
rappresentazioni_vettoriali [2025/04/07 09:12]
admin
rappresentazioni_vettoriali [2026/04/28 13:38] (versione attuale)
admin
Linea 28: Linea 28:
 $$ $$
   * quest’ultima discende direttamente dalla definizione di prodotto scalare tra vettori, secondo la quale il prodotto scalare tra due vettori equivale al prodotto delle loro norme moltiplicato per il coseno dell’angolo convesso compreso tra essi: $$ \vec{a}\cdot\vec{b}=\lVert \vec{a} \rVert \lVert \vec{b} \rVert \hspace{2pt} cos(\theta)$$   * quest’ultima discende direttamente dalla definizione di prodotto scalare tra vettori, secondo la quale il prodotto scalare tra due vettori equivale al prodotto delle loro norme moltiplicato per il coseno dell’angolo convesso compreso tra essi: $$ \vec{a}\cdot\vec{b}=\lVert \vec{a} \rVert \lVert \vec{b} \rVert \hspace{2pt} cos(\theta)$$
 +  * In base alle formule che abbiamo visto è possibile trovare il coseno dell’angolo compreso tra due vettori a partire dalle singole componenti di ciascun vettore. Questa formula è utile in quanto sono proprio le singole componenti dei vettori a rappresentare i nostri dati di partenza:
 +$$
 +cos(\theta) = \frac{\sum_{i=1}^{n} a_{i}b_{i}}{\sqrt{\sum_{i=1}^{n} a_{i}^{2}} \sqrt{\sum_{i=1}^{n} b_{i}^{2}}}
 +$$
 +
   * Lo script seguente:   * Lo script seguente:
     * definisce le funzioni per calcolare il prodotto scalare di due vettori (dot) (sulla base della formula analitica), la norma di un vettore (norm) e il coseno tra due vettori (cosine) – le definizioni delle tre funzioni sono l’espressione in python delle tre formule riportate qui sopra –;     * definisce le funzioni per calcolare il prodotto scalare di due vettori (dot) (sulla base della formula analitica), la norma di un vettore (norm) e il coseno tra due vettori (cosine) – le definizioni delle tre funzioni sono l’espressione in python delle tre formule riportate qui sopra –;
Linea 35: Linea 40:
 <code python w2vita.py> <code python w2vita.py>
 import numpy as np import numpy as np
 +
 +def dot(a,b):
 +    return sum(a[i]*b[i] for i in range(len(a)))
 +
 +def norm(a):
 +    return sum(n**2 for n in a)**(1/2)
 +    
 +def cosine(a,b):
 +    return dot(a,b)/(norm(a)*norm(b))
 +
 +'''
 dot=lambda a,b: sum(a[i]*b[i] for i in range(len(a))) dot=lambda a,b: sum(a[i]*b[i] for i in range(len(a)))
 norm=lambda a: sum(n**2 for n in a)**(1/2) norm=lambda a: sum(n**2 for n in a)**(1/2)
 cosine=lambda a,b: dot(a,b)/(norm(a)*norm(b)) cosine=lambda a,b: dot(a,b)/(norm(a)*norm(b))
- +''' 
-with open('vettori/model10000.txt', errors="ignore") as file:+with open('vettori/model10000.txt', errors="ignore") as file: #attenzione se il file non si trova in una sottocartella denominata vettori eliminare la sottostringa "vettori/"
     lines=file.readlines()     lines=file.readlines()
 vectors={} vectors={}
Linea 49: Linea 65:
         vector.append(float(number))         vector.append(float(number))
     vectors.update({term:np.array(vector)})     vectors.update({term:np.array(vector)})
-    + 
 +confronti = { 
 +    "ragazza vs donna": (vectors['ragazza'], vectors['donna']), 
 +    "ragazza vs ragazzo": (vectors['ragazza'], vectors['ragazzo']), 
 +    "ragazza vs (ragazzo + donna)": (vectors['ragazza'], vectors['ragazzo'] + vectors['donna']), 
 +    "ragazza vs (ragazzo - uomo + donna)": (vectors['ragazza'], vectors['ragazzo'] - vectors['uomo'] + vectors['donna']) 
 +
 + 
 +for etichetta, (vec_a, vec_b) in confronti.items(): 
 +    print(f"COSENO {etichetta.upper()}:"
 +    print(f"{cosine(vec_a, vec_b)}\n"
 +'''
 print("COSENO TRA 'ragazza' E 'donna':") print("COSENO TRA 'ragazza' E 'donna':")
 print(cosine(vectors['ragazza'],vectors['donna'])) print(cosine(vectors['ragazza'],vectors['donna']))
Linea 67: Linea 94:
 print("COSENO TRA 'regina' E 're'−'uomo'+'donna':") print("COSENO TRA 'regina' E 're'−'uomo'+'donna':")
 print(cosine(vectors['regina'],vectors['re']-vectors['uomo']+vectors['donna'])) print(cosine(vectors['regina'],vectors['re']-vectors['uomo']+vectors['donna']))
 +'''
 </code> </code>
 Alternativa senza l’impiego della libreria numpy: Alternativa senza l’impiego della libreria numpy:
Linea 96: Linea 124:
         vector.append(float(number))         vector.append(float(number))
     vectors.update({term:tuple(vector)})     vectors.update({term:tuple(vector)})
-    + 
 +'''    
 print("COSENO TRA 'ragazza' E 'donna':") print("COSENO TRA 'ragazza' E 'donna':")
 print(cosine(vectors['ragazza'],vectors['donna'])) print(cosine(vectors['ragazza'],vectors['donna']))
Linea 114: Linea 143:
 print("COSENO TRA 'regina' E 're'−'uomo'+'donna':") print("COSENO TRA 'regina' E 're'−'uomo'+'donna':")
 print(cosine(vectors['regina'],v_sum(v_subtr(vectors['re'],vectors['uomo']),vectors['donna']))) print(cosine(vectors['regina'],v_sum(v_subtr(vectors['re'],vectors['uomo']),vectors['donna'])))
 +'''
 </code> </code>
  
rappresentazioni_vettoriali.1744017124.txt.gz · Ultima modifica: 2025/04/07 09:12 da admin