Premier problème :
Je cherche à créer de manière rapide un tableau à plusieurs dimensions
(par exemple une matrice).
A priori rempli de zéros mais c'est juste histoire de le créer avant de
commencer à le remplir, mais si c'est possible d'avoir des cellules
vides c'est encore mieux !
Pour l'instant je fais :
a = [0 for i in xrange(15)]
for i in xrange(15):
a[i] = [0 for j in xrange(30)]
Mais c'est loin d'être rapide avec 4 ou 5 dimensions et pleins de
cellules...
Une solution serait d'utiliser Numeric/numarray avec sa fonction zeros
aussi rapide que la lumière, mais si quelqu'un avait d'autres
propositions aussi efficaces, cela m'évitera une dépendance non
nécessaire...
Deuxième problème :
Est-il possible de créer un tableau Python directement à partir de code
C en interface ?
L'idéal étant que la fonction puisse renvoyer un objet 'tableau python'.
Je suppose qu'il faut bidouiller avec l'API mais je ne vois pas trop
comment.
L'idée étant de créer en C une fonction foo qui renvoie un tableau :
A = foo(2,3)
print A
A = [[0,0,0],[0,0,0]]
Pour l'instant j'utilise Pyrex et je fais une bête recopie d'un tableau
C vers un tableau Python, mais je suppose que je pourrais directement
manipuler en C le tableau Python ?
Non, tu as là aussi quinze références vers un seul tableau à 30 éléments. La preuve:
a=[[0]*30]*15 a[0][1]=5 a[0][1] 5
a[7][1] 5
Pas très utile, comme matrice...
Amaury
Sébastien Aubry
Do Re Mi chel La Si Do wrote:
Oui, effectivement. Fallait y penser...
Et, autant continuer : a=[[0]*30]*15
C'est volontairement que je ne l'ai pas fait, à cause des problèmes de référence décrits dans la première réponse à ton message. Autant on peut recopier 0 ou None, autant dès qu'il s'agit d'une liste, il faut en faire des copies.
Sébastien Aubry
Do Re Mi chel La Si Do wrote:
Oui, effectivement. Fallait y penser...
Et, autant continuer : a=[[0]*30]*15
C'est volontairement que je ne l'ai pas fait, à cause des problèmes de
référence décrits dans la première réponse à ton message.
Autant on peut recopier 0 ou None, autant dès qu'il s'agit d'une liste,
il faut en faire des copies.
C'est volontairement que je ne l'ai pas fait, à cause des problèmes de référence décrits dans la première réponse à ton message. Autant on peut recopier 0 ou None, autant dès qu'il s'agit d'une liste, il faut en faire des copies.