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 :

fonctions sur numpy.array


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut fonctions sur numpy.array
    Bonjour à tous,

    je développe un script pour faire du calcul sur des directions et vitesses de vents; et j'ai besoin de définir au préalable une fonction de kernel gaussien et d'epanechnikov.

    Mon problème vient de la deuxième. Voici comment je l'ai définie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     def epanechK(x):
            y=0
            if -1<x<1:
                   y=0.75*(1-x**2)
            return y
    dans la pratique, x = (X-wd[i])/sig ; avec X un array, wd[i] un élément d'une liste, et sig une constante.

    et quand je fais tourner le script, j'ai cette erreur:
    "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"

    j'ai donc changé la définition de la fonction par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     def epanechK(x):
            y=0
            if all([x<1,x>-1]):
                   y=0.75*(1-x**2)
            return y
    Mais rien n'y fait, j'ai toujours ce même message d'erreur.

    Quelqu'un connait-il la bonne syntaxe a utiliser??


    P.S.: pour info, le script marche très bien lorsque je ne met aucune condition sur x....

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 947
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,
    Citation Envoyé par jeps76 Voir le message
    "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"
    Le message d'erreur dit que all est une méthode de l'objet a, or tu l'utilises comme une fonction. si X est ton objet numpy, il faudrait écrire X.all()

    A+

    Pfeuh

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    D'accord... mais du coup, comment faire passer la condition?
    x.all(x>-1, x<1)??

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 947
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par jeps76 Voir le message
    D'accord... mais du coup, comment faire passer la condition?
    x.all(x>-1, x<1)??
    Je ne sais pas ce que tu veux faire, mais peut-être comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if X.all() > -1 and X.all() < 1:
        # traitement

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Yes, ça marche sans soucis!! merci beaucoup

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def epanechK(x):
            y=0
            if -1<x<1:
                   y=0.75*(1-x**2)
            return y
    C'est mieux avec where:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import numpy as np
    def epanechK(x):
      return np.where(np.and(x<1, -1<x), 0.75*(1-x**2), 0)
    Ou quelque chose du style.

Discussions similaires

  1. Modifier un numpy array dans une fonction ?
    Par Kaluza dans le forum Général Python
    Réponses: 2
    Dernier message: 05/03/2013, 13h53
  2. Fonction cumul sur un array
    Par Tintin87 dans le forum Langage
    Réponses: 10
    Dernier message: 16/09/2011, 20h06
  3. Réponses: 3
    Dernier message: 16/03/2011, 11h11
  4. fonction trim sur les array de array
    Par billyrose dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2009, 12h24
  5. [LG]Symbole # (dièse) et fonctions sur les chaînes
    Par James64 dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2004, 14h19

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