IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

multiplication de vecteurs pour regression linéaire


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Janvier 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut multiplication de vecteurs pour regression linéaire
    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()

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    X,Y ne sont pas des array.
    Après print(npoints), faites un print(X) ou un print(type(X)) vous allez voir.

    Il ne faut jamais avoir de certitude comme ca. S'il y a un bug c'est qu'il y a un problème quelquepart. Et si vous êtes sûr de tout, et bien alors il n'y a pas de problème, mis à part pour résoudre un problème qui ne devrait pas arrivé !
    Donc quand il y a un souci, il faut tout remettre en question. Ce dont on pense être sûr, alors on print les variables pour vérifier si notre certitude c'est bien ca qui se passe ou non. Et c'est comme ca qu'on finit par trouver l'erreur.

    En l’occurrence ici chez vous c'est ligne 41-42. C'est 2 lignes ne font rien (et donc pas la conversion que vous pensiez faire).

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/01/2019, 12h11
  2. Regression linéaire multiple
    Par Négrier dans le forum Langage
    Réponses: 15
    Dernier message: 01/07/2017, 09h37
  3. Regression linéaire multiple
    Par Newenda dans le forum Bibliothèques d'apprentissage automatique
    Réponses: 0
    Dernier message: 12/05/2017, 18h11
  4. Réponses: 10
    Dernier message: 17/08/2006, 22h27
  5. Vecteur de vecteur pour JTable
    Par arasium dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2006, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo