Nota: Esto solicita lo contrario de la conversión habitual de tupla a matriz.
Tengo que pasar un argumento a una función (c ++ envuelto) como una tupla anidada. Por ejemplo, las siguientes obras
X = MyFunction( ((2,2),(2,-2)) )
mientras que los siguientes no
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Desafortunadamente, el argumento que me gustaría usar me viene como una matriz numerosa. Esa matriz siempre tiene dimensiones 2xN para algunos N, que pueden ser bastante grandes.
¿Existe una manera fácil de convertir eso en una tupla? Sé que podría simplemente recorrer, creando una nueva tupla, pero preferiría que hubiera un buen acceso que proporciona la matriz numpy.
Si no es posible hacer esto tan bien como espero, ¿cuál es la forma más bonita de hacerlo mediante un bucle o lo que sea?
tuple(arr)
Aquí hay una función que lo hará:
Y un ejemplo:
fuente
type(a)==numpy.ndarray
?No estaba satisfecho, así que finalmente usé esto:
No sé si es más rápido, pero parece más efectivo;)
fuente
Otra opción
Si está pasando matrices NumPy a funciones C ++, es posible que también desee utilizar Cython o SWIG.
fuente
list
omitiendo los corchetes, es decir, usandotuple(tuple(row) for row in myarray)
Si te gustan los cortes largos, aquí tienes otra forma de tupla (tupla (a_m.tolist ()) para a_m en a)
La salida es ((1, 2), (3, 4))
Tenga en cuenta que solo (tuple (a_m.tolist ()) para a_m en a) dará una expresión generadora. Algo inspirado por el comentario de @ norok2 a la respuesta de Greg von Winckel
fuente