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

Python Discussion :

n = len(x) TypeError: len() of unsized object


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Par défaut n = len(x) TypeError: len() of unsized object
    Bonjour,
    J'ai un programme qui lit des données qui arrivent toutes les secondes sur un port série et je chercher a faire une régression linéaire toutes les 3 minutes sur ces données.

    voila mon code :
    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
    import time
    import datetime
    import serial
    import csv
    import numpy as np
    from scipy import stats
    import matplotlib.pyplot as plt
    import matplotlib.dates as dates
     
    ser = serial.Serial('COM4', 9600, timeout=1)
     
    time_init=datetime.datetime.now()
    list_data=[]  #liste contentant les donnees
    list_delta=[] #liste contentant les deltas
    list_time=[] #liste contenant le temps
    test = str(datetime.timedelta(seconds=180.0))
     
    #print (test)
    b=True
     
     
    # boucle qui lit les donnees toutes les 3 minutes
    while b:
        data=ser.readline()     # lecture des donnees du port serie
        data=data.decode('ascii')  # decode les donnees
        time_data=datetime.datetime.now()  # heure des donnees
        delta=str(time_data - time_init)
     
        list_data.append(data)
        list_delta.append(delta)
        list_time.append(str(time_data))
     
        print(list_data)
     
        # si delta est strictement superieur a 3 minutes
        if delta > test:
            del list_time[0]     # supprime le premier temps car donnee vide
            for data in list_data:
                #print(data)
                y = np.array([data])
                ys = np.squeeze(y)
     
                print(ys)
     
            for time_data in list_time:
                #print(time_data)
                x = np.array(str(time_data))
                print(x)
            slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x,ys)
     
            break
    Cependant j'obtient l'erreur suivante :

    n = len(x)
    TypeError: len() of unsized object
    Je ne vois pas comment faire pour résoudre cette erreur ..
    Merci pour votre aide

  2. #2
    Membre confirmé Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Par défaut
    Citation Envoyé par jean-pierre123 Voir le message

    x = np.array(str(time_data))
    print(x)
    Essaie en deux étapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = np.array(time_data)
    s = str(x)
    print(len(s))

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par jean-pierre123 Voir le message
    Je ne vois pas comment faire pour résoudre cette erreur ..
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            for data in list_data:
                #print(data)
                y = np.array([data])
                ys = np.squeeze(y)
     
                print(ys)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            for time_data in list_time:
                #print(time_data)
                x = np.array(str(time_data))
                print(x)
    à la sortie, ys et x n'auront que la dernière valeur des listes correspondantes.
    Pourquoi accumuler des données pendant 3 minutes, si seule la dernière vous intéresse?
    En tous cas, c'est sûr que faire de la régression statistique avec une seule données, çà ne le fera pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Par défaut
    Je pense avoir résolu mon soucis
    J'ai convertis le temps en seconde dans ma boucle while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = time.mktime(time_data.timetuple())
    et dans mes deux boucles for j'ai utilisé append()
    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
        if delta > test:
            del list_time[0] 
            del list_data[0]  
            list_y=[]
            list_x=[]
     
            for data in list_data:
                y = np.array([data])
                ys = np.squeeze(y)
                ystring = str(ys)
                list_y.append(ystring)
                y1 = np.asarray([list_y], float)
     
            for t in list_time:
                x = np.array(t)
                list_x.append(x)
                x1 = np.asarray([list_x])
     
            slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x1,y1)

Discussions similaires

  1. Erreur TypeError: a bytes-like object is required, not 'str'
    Par djbad dans le forum Général Python
    Réponses: 5
    Dernier message: 17/01/2017, 20h40
  2. [Python 3.X] Comprendre l'erreur TypeError: object of type 'Header' has no len()
    Par jeje3314 dans le forum Général Python
    Réponses: 4
    Dernier message: 22/04/2016, 11h45
  3. Fonction LEN
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/12/2005, 11h02
  4. fonction len
    Par pmboutteau dans le forum ASP
    Réponses: 3
    Dernier message: 08/03/2005, 10h42

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