Considera tre vettori della stessa lunghezza
vettA = [2, 7, 1, 0, 1, 9, 9, 5]
vettB = [1, 2, 0, 4, 1, 9, 9, 7]
vettC = [1, 8, 0, 5, 1, 9, 9, 9]
Le operazioni seguenti producono un numero.
Prodotto scalare
Formula:
def prodScalare(v1, v2):
n = len(v1)
somma = 0
for i in range(n):
x = v1[i]
y = v2[i]
z = x*y
somma += z
return somma
def prodScalare(v1, v2):
somma = 0
for i in range(len(v1)):
somma += v1[i]*v2[i]
return somma
def prodScalare(v1, v2):
somma = 0
for x, y in zip(v1, v2):
somma += x*y
return somma
ps1 = prodScalare(vettA, vettB) # [2, 7, 1, 0, 1, 9, 9, 5]*[1, 2, 0, 4, 1, 9, 9, 7]
# = 2*1 + 7*2 + 1*0 + 0*4 + 1*1 + 9*9 + 9*9 + 5*7
# = 214
ps2 = prodScalare(vettA, vettC) # ... = 266
ps3 = prodScalare(vettB, vettC) # ... = 263
Norma 1
La somma dei valori assoluti
def norma1(v):
somma = 0
for x in v:
somma += abs(x)
return somma
Norma 2
Norma euclidea:
def norma(v):
n = len(v)
somma = 0
for i in range(n):
x = v[i]**2
somma += x
y = math.sqrt(somma)
return y
def norma(v):
n = len(v)
somma = 0
for i in range(n):
somma += v[i]**2
return math.sqrt(somma)
def norma(v):
somma = 0
for x in v:
somma += x**2
return math.sqrt(somma)
n1 = norma(vettA) # | [2,7,1,0,1,9,9,5] |
# = RADQ(2*2 + 7*7 + 1*1 + 0*0 + 1*1 + 9*9 + 9*9 + 5*5)
# = RADQ(4 + 49 + 1 + 0 + 1 + 81 + 81 + 25)
# = RADQ(242)
# = 15.5563...
n2 = norma(vettB) # ... = 15.2643...
n3 = norma(vettC) # ... = 18.2756...
Più breve? Utilizza il prodotto scalare.
def norma(v):
return math.sqrt(prodScalare(v, v))
Norma 3
Il più grande tra i valori assoluti
def norma3(v):
massimo = 0
for x in v:
x = abs(x)
if(x > massimo):
massimo = x
return massimo