Operazioni con vettori – 2

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: a_1\cdot b_1+a_2\cdot b_2+ \dots + a_n\cdot b_n

def prodScalare(v1, v2): 
    n = len(v1)
    s = 0 
    for i in range(n):
        x  = v1[i]*v2[i]
        s += x
    return s
def prodScalare(v1, v2): 
    s = 0 
    for i in range(len(v1)):
        s += v1[i]*v2[i] 
    return s
def prodScalare(v1, v2): 
    s = 0 
    for x, y in zip(v1, v2): 
        s += x*y 
    return s 

Prova

ps1 = prodScalare(vettA, vettB)  # = 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

Somma dei valori assoluti: \displaystyle |a_1|+|a_2|+ \dots + |a_n|

def norma1(v):
    n = len(v)
    s = 0 
    for i in range(n):
        x  = abs(v[i]) 
        s += x 
    return s
def norma1(v):
    s = 0 
    for i in range(len(v)): 
        s += abs(v[i]) 
    return s
def norma1(v):
    s = 0 
    for x in v: 
        s += abs(x) 
    return s

Norma 2

Norma euclidea: \displaystyle \sqrt{a_1^2+a_2^2+ \dots + a_n^2

def norma(v): 
    n = len(v)
    s = 0 
    for i in range(n): 
        x  = v[i]**2
        s += x
    return math.sqrt(s)
def norma(v): 
    s = 0 
    for i in range(len(v)): 
        s += v[i]**2 
    return math.sqrt(s) 
def norma(v): 
    s = 0 
    for x in v: 
        s += x**2 
    return math.sqrt(s) 

Prova

n1 = norma(vettA)  # = 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: \displaystyle \max \{|a_1|, |a_2|, \dots , |a_n|\}

def norma3(v):
    n = len(v)
    m = 0 
    for i in range(n):
        x = abs(v[i])
        if(x > m):
            m = x 
    return m
def norma3(v):
    m = 0 
    for x in v:
        x = abs(x)
        if(x > m):
            m = x 
    return m
def norma3(v):
    m = 0 
    for x in v:
        m = max(m, abs(x))
    return m