Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
|
rappresentazioni_vettoriali [2024/07/09 11:46] admin |
rappresentazioni_vettoriali [2026/04/28 13:38] (versione attuale) admin |
||
|---|---|---|---|
| Linea 2: | Linea 2: | ||
| ===== Preparazione ===== | ===== Preparazione ===== | ||
| * Creare un cartella " | * Creare un cartella " | ||
| - | * Copiare nella cartella " | + | * Copiare nella cartella " |
| ===== I vettori in formato testo ===== | ===== I vettori in formato testo ===== | ||
| * Nel nostro file i vettori sono registrati come righe di testo che comprendono la parola rappresentata seguita da uno spazio seguito a sua volta dai valori numerici delle componenti dei vettori intervallati da spazi. | * Nel nostro file i vettori sono registrati come righe di testo che comprendono la parola rappresentata seguita da uno spazio seguito a sua volta dai valori numerici delle componenti dei vettori intervallati da spazi. | ||
| Linea 14: | Linea 14: | ||
| Ciascuna componente è un numero reale compreso tra 1 e -1. Ogni vettore può essere visto come una freccia che parte dall’origine e punta verso un punto le cui coordinate coincidono con le componenti del vettore in uno spazio cartesiano di 100 dimensioni (per cui ogni punto ha 100 coordinate anziché averne 2 - come accade quando si lavora con un piano - o 3 - come accade quando si lavora con il consueto spazio tridimensionale). | Ciascuna componente è un numero reale compreso tra 1 e -1. Ogni vettore può essere visto come una freccia che parte dall’origine e punta verso un punto le cui coordinate coincidono con le componenti del vettore in uno spazio cartesiano di 100 dimensioni (per cui ogni punto ha 100 coordinate anziché averne 2 - come accade quando si lavora con un piano - o 3 - come accade quando si lavora con il consueto spazio tridimensionale). | ||
| ===== Script python per leggere i vettori e calcolarne il coseno ===== | ===== Script python per leggere i vettori e calcolarne il coseno ===== | ||
| - | * Occorre tenere presenti le tre formule seguenti: 1) formula analitica del prodotto scalare tra vettori, secondo la quale il prodotto scalare tra due vettori si può calcolare come somma dei prodotti tra le componenti omonime dei vettori: | + | * Occorre tenere presenti le tre formule seguenti: 1) **formula analitica del prodotto scalare tra vettori**, secondo la quale il prodotto scalare tra due vettori si può calcolare come somma dei prodotti tra le componenti omonime dei vettori: |
| $$ | $$ | ||
| \vec{a}\cdot\vec{b}=\sum_{i=1}^{n} a_{i}b_{i} | \vec{a}\cdot\vec{b}=\sum_{i=1}^{n} a_{i}b_{i} | ||
| $$ | $$ | ||
| - | * 2) formula della norma di un vettore, secondo la quale la norma di un vettore è pari alla radice quadrata della somma dei quadrati delle componenti del vettore: | + | * 2) **formula della norma di un vettore**, secondo la quale la norma di un vettore è pari alla radice quadrata della somma dei quadrati delle componenti del vettore: |
| $$ | $$ | ||
| \lVert \vec{a} \rVert =\sqrt{\sum_{i=1}^{n} a_{i}^{2}} | \lVert \vec{a} \rVert =\sqrt{\sum_{i=1}^{n} a_{i}^{2}} | ||
| $$ | $$ | ||
| - | * 3) formula del coseno: | + | * 3) **formula del coseno**: |
| $$ | $$ | ||
| cos(\theta) = \frac{\vec{a}\cdot\vec{b}}{\lVert \vec{a} \rVert \lVert \vec{b} \rVert} | cos(\theta) = \frac{\vec{a}\cdot\vec{b}}{\lVert \vec{a} \rVert \lVert \vec{b} \rVert} | ||
| $$ | $$ | ||
| - | * 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 dei vettori | + | * 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, | ||
| + | return dot(a, | ||
| + | |||
| + | ''' | ||
| 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, | cosine=lambda a,b: dot(a, | ||
| - | + | ''' | |
| - | with open(' | + | with open(' |
| lines=file.readlines() | lines=file.readlines() | ||
| vectors={} | vectors={} | ||
| Linea 49: | Linea 65: | ||
| vector.append(float(number)) | vector.append(float(number)) | ||
| vectors.update({term: | vectors.update({term: | ||
| - | | + | |
| + | confronti = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | |||
| + | for etichetta, (vec_a, vec_b) in confronti.items(): | ||
| + | print(f" | ||
| + | print(f" | ||
| + | ''' | ||
| print(" | print(" | ||
| print(cosine(vectors[' | print(cosine(vectors[' | ||
| Linea 67: | Linea 94: | ||
| print(" | print(" | ||
| print(cosine(vectors[' | print(cosine(vectors[' | ||
| + | ''' | ||
| </ | </ | ||
| + | Alternativa senza l’impiego della libreria numpy: | ||
| + | <code python w2vita_bis.py> | ||
| + | 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, | ||
| + | return dot(a, | ||
| + | |||
| + | def v_sum(a,b): | ||
| + | return tuple(a[i]+b[i] for i in range(len(a))) | ||
| + | |||
| + | def v_subtr(a, | ||
| + | return tuple(a[i]-b[i] for i in range(len(a))) | ||
| + | |||
| + | |||
| + | with open(' | ||
| + | lines=file.readlines() | ||
| + | vectors={} | ||
| + | for line in lines: | ||
| + | line=line.split() | ||
| + | term=line.pop(0) # term=v[0]; v=v[1:] | ||
| + | vector=[] | ||
| + | for number in line: | ||
| + | vector.append(float(number)) | ||
| + | vectors.update({term: | ||
| + | |||
| + | ''' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print() | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | print(" | ||
| + | print(cosine(vectors[' | ||
| + | ''' | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| Dovrebbero apparire i seguenti risultati: | Dovrebbero apparire i seguenti risultati: | ||
| <code python> | <code python> | ||