Bonjour,
J'ai un problème avc mon programme python quand je cherche à faire un produit de deux vecteurs. Le programme a pour objectif de créer un nuage de point à partir d'une image et de construire une régression linéaire à partir de ces points.
J'ai un problème avec la fonction regLin_np(x, y):, le shell me revoit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
a = (npoints * (x*y).sum() - x.sum()*y.sum()) / (npoints*(x**2).sum() - (x.sum())**2)
TypeError: can't multiply sequence by non-int of type 'list'
J'ai pourtant convertit mes listes X et Y en vecteurs numpy donc je ne comprend pas l'erreur. De plus, lorsque je recopie cette ligne dans le shell, elle fonctionne.

Si quelqu'un voit l'erreur ce serait mon jour de chance ! merci d'avance !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
image = Image.open("image4.jpeg")
largeur, hauteur = image.size
 
L= []
regressionX = []
regressionY = []
difference = [0]
valeurs =[]
X = []
Y = []
npoints = []
a = 0
b = 0
 
def index_max(liste) :
    max = liste[0]
    a = 0
    for i in range(len(liste)) :
        if liste[i] > max :
            max = liste[i]
            a = i
            return a
 
def valeurs_max(img) :
    for y in range(hauteur) :
        for x in range(largeur) :
            r, v ,b = img.getpixel((x, y))
            L.append(b)
        for i in range(len(L) - 1) :
            difference.append(abs(L[i+1] - L[i]))
        X.append(index_max(difference))
        Y.insert(0, y)
        difference.clear()
        L.clear()
    return X, Y
 
valeurs_max(image)
np.array(X)
np.array(Y)
 
def regLin_np(x, y) :
    npoints = len(x)
    print(npoints)
    a = (npoints * (x*y).sum() - x.sum()*y.sum()) / (npoints*(x**2).sum() - (x.sum())**2)
    b = ((x**2).sum()*y.sum() - x.sum() * (x*y).sum()) / (npoints * (x**2).sum() - (x.sum())**2)
    return a, b
 
regLin_np(Y, X)
 
def f(x) :
    return a*x +b
 
regressionY.append(0)
regressionY.append(largeur)
regressionX.append(f(0))
regressionX.append(f(largeur))
axes = plt.axes()
axes.grid()
plt.scratter(X, Y)
plt.plot(regressionX, regressionY)
plt.show()