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 :

[Numpy et Cpython] erreur


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 78
    Points
    78
    Par défaut [Numpy et Cpython] erreur
    Bonjour,

    Je tente de faire un module, j'ai un soucis il semblerai que mon code produise une erreur qui entraine la fermeture de python ( peut être erreur de segmentation). Je peux utiliser mon module dans python il me retourne un résultat correcte mais quand je ferme IDLE, un fenêtre d'erreur apparait et ne dit que pythonw.exe à rencontrer une erreur et doit fermer.( Dans eclispe je ne rencontre cependant aucune erreur)

    voici le code du fichier calculs.c
    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
    #include "Python.h"
    #include "numpy/arrayobject.h"
     
    static void tab(long ksize ,npy_float64 *kernel)
     
    {
    	int i;
    	for(i=0.;i<ksize;i++)
    		kernel[i]=i;
    }
     
    static PyObject *Py_tab(PyObject *obj, PyObject *args)
    {
    	PyObject *okernel;
    	PyArrayObject *kernel=NULL;
     
    	if (!PyArg_ParseTuple(args,"O",&okernel))
    	{	
    		PyErr_SetString(PyExc_ValueError,"tab :Invalid number of parametre");
    		goto _fail;
    	}
     
    	kernel = (PyArrayObject *) PyArray_ContiguousFromAny(okernel, NPY_FLOAT64, 1, 1);
     
    	if (!kernel) goto _fail;
     
    	tab(kernel->dimensions[0], (npy_float64 *) kernel->data);
    	Py_DECREF(kernel);
    	return PyArray_Return(kernel);
     
    	_fail:
    		Py_XDECREF(kernel);		
    		return NULL;
    }
     
    static PyMethodDef tabmethod[]={	
    	{"tab",Py_tab,METH_VARARGS,"aide"},
    	{NULL,NULL,0,NULL}
    };
     
    PyMODINIT_FUNC initsavoir(void)
    {	
    	import_array();	
    	(void) Py_InitModule("savoir",tabmethod);
    }
    et le fichier setup.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import numpy
    def configuration(parent_package='',top_path=None):
    	from numpy.distutils.misc_util import Configuration
     	config = Configuration("savoir",parent_package,top_path)
     	config.add_extension('savoir', 
     						sources=["calculs.c"],
     						include_dirs=[numpy.get_include()])
     	return config
     
    if __name__ == "__main__":
     	from numpy.distutils.core import setup
     	config = configuration(top_path='').todict()
     	setup(author='t',author_email='thi@hotmail.fr',
     		description='essai',version="1",**config)

    J'ai equalement d'autre question:
    • Comment récupérer un tableau python "normal" et le parcourir

    • Existe t-il des fonctions déjà définie en c pour réaliser des somme de tableau, des exponentiel et multiplication.

    • sinon si ca faut le cout peut on recuperer les fonction de numpy pour realiser les operation cité au-dessus

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 78
    Points
    78
    Par défaut
    pour l'erreur je pense avoir trouver car je n'est plus de probleme.
    Cela venait de cette ligne Py_DECREF(kernel);
    voici le code corrigé.
    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
    #include "Python.h"
    #include "numpy/arrayobject.h"
     
    static void tab(long ksize ,npy_float64 *kernel)
     
    {
    	int i;
    	for(i=0.;i<ksize;i++)
    		kernel[i]=i;
    }
     
    static PyObject *Py_tab(PyObject *obj, PyObject *args)
    {
    	PyObject *okernel;
    	PyArrayObject *kernel=NULL;
     
    	if (!PyArg_ParseTuple(args,"O",&okernel))
    	{	
    		PyErr_SetString(PyExc_ValueError,"tab :Invalid number of parametre");
    		goto _fail;
    	}
     
    	kernel = (PyArrayObject *) PyArray_ContiguousFromAny(okernel, NPY_FLOAT64, 1, 1);
     
    	if (!kernel) goto _fail;
     
    	tab(kernel->dimensions[0], (npy_float64 *) kernel->data);
     
    	return PyArray_Return(kernel);
     
    	_fail:
    		Py_XDECREF(kernel);		
    		return NULL;
    }
     
    static PyMethodDef tabmethod[]={	
    	{"tab",Py_tab,METH_VARARGS,"aide"},
    	{NULL,NULL,0,NULL}
    };
     
    PyMODINIT_FUNC initsavoir(void)
    {	
    	import_array();	
    	(void) Py_InitModule("savoir",tabmethod);
    }
    Par contre je cherche toujours pour les tableau python "normaux" et le reste des question que j'avais poser au-dessus

  3. #3
    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
    Pour les tableaux Python normaux, il te faut regarder dans la doc officielle de Python, il y a tout indiqué, ainsi qui nécessite de décrémenter ou incrémenter les références.

    En ce qui concerne Numpy, il te faut le livre de Travis Oliphant dans lequel tout est indiqué, mais il est payant pour le moment. Certaines fonctions sont implémentées en C directement, mais je ne suis pas sûr qu'on puisse les appeler directement.

Discussions similaires

  1. Pycharm - erreur numpy - conseils
    Par bm dans le forum Général Python
    Réponses: 10
    Dernier message: 05/02/2015, 11h14
  2. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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