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 :

Conversion d'un vecteur de dates MATLAB


Sujet :

Python

  1. #1
    Membre �clair� Avatar de habasque
    Homme Profil pro
    Ing�nieur d'�tudes
    Inscrit en
    Septembre 2006
    Messages
    530
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d'�tudes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par d�faut Conversion d'un vecteur de dates MATLAB
    Bonjour � tous,

    Je cherche � convertir un vecteur "matlab_datenum" qui contient des dates au format MATLAB:
    [[735275]
    [735275]
    [735276]
    ...,
    [730395]
    [730395]
    [730396]]
    J'utilise le code suivant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    python_datetime = datetime.fromordinal(matlab_datenum.astype(int))
    Mais j'obtiens l'erreur suivante:
    TypeError: only length-1 arrays can be converted to Python scalars
    Je comprends bien l'erreur mais je ne souhaite pas faire une boucle pour passer les �l�ments un par un � la fonction fromordinal.
    Y a t-il des alternatives ?

    Merci d'avance,

  2. #2
    Membre Expert

    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
    Par d�faut
    Faudrait mettre un peu plus de code car l� difficile de t'aider ...

    Comment est ce que tu lis le fichier pr�sent� ?
    Comment construis-tu la variable matlab_datenum ?
    Quel est le r�sultat attendu ?

  3. #3
    Membre �clair� Avatar de habasque
    Homme Profil pro
    Ing�nieur d'�tudes
    Inscrit en
    Septembre 2006
    Messages
    530
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d'�tudes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par d�faut
    Bonjour,

    La lecture du fichier se fait comme suit:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    f = 'D:/mon_fichier.mat' 
    x = scipy.io.loadmat(f)
    time_drogue_on = x['time_drogue_on'].T
    La variable "datenum" est construit comme suit:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    matlab_datenum = np.empty((np.size(time_drogue_on)))
    matlab_datenum  = time_drogue_on.astype(int)
    Le r�sultat attendu est un vecteur de dates au format Python datetime.datetime.

    Merci !

  4. #4
    Membre Expert

    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
    Par d�faut
    Ca n'a pas l'air si trivial que je le pensais.
    Pourquoi ne pas vouloir faire de boucle ? Car ca se fait assez simplement tout de m�me :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    mes_datetime = [datetime.fromordinal(elt) for elt in matlab_datenum ]
    Sans faire de boucle for, peut-�tre une piste du c�t� de pandas :
    https://pandas.pydata.org/pandas-doc..._datetime.html


    NB : Ecrire cela
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    matlab_datenum = np.empty((np.size(time_drogue_on)))
    matlab_datenum  = time_drogue_on.astype(int)
    est inutile car la 2eme ligne vient �craser le r�sultat de la 1ere ! Donc tu peux enlever la 1ere ligne.

  5. #5
    Membre �clair� Avatar de habasque
    Homme Profil pro
    Ing�nieur d'�tudes
    Inscrit en
    Septembre 2006
    Messages
    530
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d'�tudes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par d�faut
    Bonjour,

    Je voulais �viter de faire une boucle car j'ai 500000 �l�ments � traiter. Avec une boucle le traitement est tr�s tr�s long.

    Je me suis inspir� du code propos� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    mes_datetime = [datetime.fromordinal(elt) + timedelta(days=elt%1) - timedelta(days = 366) for elt in matlab_datenum ]
    mais j'ai une erreur sur l'utilisation de 'timedelta':
    TypeError: unsupported type for timedelta days component: numpy.ndarray

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 772
    Par d�faut
    Salut,

    Citation Envoy� par habasque Voir le message
    Je voulais �viter de faire une boucle car j'ai 500000 �l�ments � traiter. Avec une boucle le traitement est tr�s tr�s long.
    Pour faire faire le boulot par numpy, il faut convertir le tableau avec .astype avec 'M8[D]' en argument (document� ici) apr�s avoir ajout� l'offset qui va bien (les bases de temps �tant diff�rentes).

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

  7. #7
    Membre Expert

    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
    Par d�faut
    Citation Envoy� par habasque Voir le message
    Je me suis inspir� du code propos� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    mes_datetime = [datetime.fromordinal(elt) + timedelta(days=elt%1) - timedelta(days = 366) for elt in matlab_datenum ]
    mais j'ai une erreur sur l'utilisation de 'timedelta':
    TypeError: unsupported type for timedelta days component: numpy.ndarray
    Le message d'erreur est relativement clair : le type de la donn�e fournie � timedelta n'est pas celui attendu.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    matlab_datenum = np.array([735275,735275,730395,730396])
    print(type(matlab_datenum[0]))  ### Remarquons que ce n'est pas un int
    #t=timedelta(days=matlab_datenum[0])  ### Produit une erreur
    t=timedelta(days=int(matlab_datenum[0])) ### Correct
    Note que d'utiliser une liste en intention c'est quand m�me aussi faire une boucle for indirectement ... C'est plus performant que de faire des append dans une boucle for, mais ca reste it�ratif. Donc voit les performances que tu obtiens avec �a si �a te convient. Sinon il faudra te pencher sur ce que propose wiztricks et tu auras en sortie un type numpy.datetime64 et pas une liste de datetime ...

Discussions similaires

  1. Conversion dates MATLAB vers Excel
    Par harafado dans le forum MATLAB
    R�ponses: 3
    Dernier message: 02/04/2009, 12h47
  2. [Dates] Conversion d'un string en date
    Par ludo2612 dans le forum Langage
    R�ponses: 9
    Dernier message: 04/02/2008, 21h15
  3. conversion d'un format de date du type 13/06/2007
    Par pierre2410 dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 25/06/2007, 14h26
  4. conversion d'une chaine en date
    Par monphp dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 31/05/2007, 10h29
  5. [Dates] Conversion d'un text en date
    Par sagitarium dans le forum Langage
    R�ponses: 1
    Dernier message: 07/06/2006, 19h21

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