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

Interfaçage autre langage Python Discussion :

[SWIG] C-Python : les tableaux 2D


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [SWIG] C-Python : les tableaux 2D
    Bonjour
    Je suis stagiaire (en acoustique lol, et pas très doué en code) et on me demande d'interfacer du C (pour la rapidité des calculs) avec du Python (pour l'interface).
    J'ai choisi d'utiliser swig, et ca marche plutôt pas mal, sauf quand il s'agit de tableaux 2D.
    Pour faire simple (j'ose espérer que résoudre ce problème résoudra tous les autres), j'ai une fonction C qui calcule le produit de 2 matrices 2*2 passées en paramètres, et remplace m1 par le résultat. Fonction du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void multiplie(complex **m1[2], complex **m2[2])
    Quand j'appelle cette fonction depuis Python, mes matrices sont des 2D-arrays créés avec Numpy.

    Mon fichier d'interface ressemble donc à ca :
    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
    %module acoustic
     
    %{
        #define SWIG_FILE_WITH_INIT
        #include "acoustic.h"
    %}
     
    %include "numpy.i"
     
    %init %{
        import_array();
    %}
     
    %typemap(in) Py_complex* ARGOUT_ARRAY[ANY][ANY] {
        $1 = ($1_ltype) Py_complex_AsLong($input);
    }
     
    %include "acoustic.h"
     
    %apply (Py_complex* ARGOUT_ARRAY[ANY][ANY]) {(complex* *m[ANY])};
    void multiplie(complex* *m[2], complex* *m2[2]) ;
    La compilation se passe bien, l'importation dans Python aussi. Mais lorsque j'exécute la fonction, je reçois le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: in method 'multiplie', argument 1 of type 'complex **[2]'
    Je pense que le problème vient du fichier d'interface. Ca fait une semaine que je parcours le web en long et en large pour trouver une solution, mais j'avoue que j'ai du mal à comprendre les typemaps (qui sont à la source de mon problème il me semble ?).
    Autre chose me dérange : je suis obligé de passer la matrice à la fonction sous la forme **m[2], sinon l'exécution du code C n'aboutit pas. Mais dans la doc de swig, c'est plutôt *m[2][2] que je devrai utiliser...

    Si quelqu'un pouvait m'éclairer, je lui en serai fortement reconnaissant.

    Merci d'avance

    Lelapindepauline

  2. #2
    Candidat au Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai le même type de problème que toi (la même erreur dans python en fait), tu as réussi à le résoudre depuis ou pas ?

Discussions similaires

  1. [Python 2.X] les tableaux en python
    Par la_fouine1806 dans le forum Général Python
    Réponses: 6
    Dernier message: 03/12/2014, 12h48
  2. SWIG - python : les accesseurs
    Par simastion dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 25/03/2010, 10h59
  3. Réponses: 14
    Dernier message: 01/09/2003, 23h46
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 19h10

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