Remarque: Ceci demande l'inverse de la conversion habituelle de tuple en tableau.
Je dois passer un argument à une fonction (c ++ enveloppée) en tant que tuple imbriqué. Par exemple, les travaux suivants
X = MyFunction( ((2,2),(2,-2)) )
alors que ce qui suit ne
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Malheureusement, l'argument que je voudrais utiliser me vient comme un tableau numpy. Ce tableau a toujours des dimensions 2xN pour certains N, qui peuvent être assez grands.
Existe-t-il un moyen simple de convertir cela en tuple? Je sais que je pourrais simplement faire une boucle, créer un nouveau tuple, mais préférerais s'il y a un accès agréable que le tableau numpy fournit.
S'il n'est pas possible de le faire aussi bien que je l'espère, quelle est la plus jolie façon de le faire en boucle, ou autre?
tuple(arr)
Voici une fonction qui le fera:
Et un exemple:
la source
type(a)==numpy.ndarray
?Je n'étais pas satisfait, alors j'ai finalement utilisé ceci:
Je ne sais pas si c'est plus rapide, mais ça a l'air plus efficace;)
la source
Une autre option
Si vous passez des tableaux NumPy à des fonctions C ++, vous pouvez également envisager d'utiliser Cython ou SWIG.
la source
list
en omettant les crochets, c'est-à-dire en utilisanttuple(tuple(row) for row in myarray)
Si vous aimez les coupes longues, voici une autre façon tuple (tuple (a_m.tolist ()) pour a_m dans a)
La sortie est ((1, 2), (3, 4))
Notez que juste (tuple (a_m.tolist ()) pour a_m dans a) donnera une expression de générateur. Un peu inspiré par le commentaire de @ norok2 à la réponse de Greg von Winckel
la source