Nota: Esto es pedir el reverso de la conversión normal de tupla a arreglo.Convertir numpy array en tupla
Tengo que pasar un argumento a una función (wrap C++) como una tupla anidada. Por ejemplo, las siguientes obras
X = MyFunction(((2,2),(2,-2)))
mientras que el siguiente No
X = MyFunction(numpy.array(((2,2),(2,-2))))
X = MyFunction([[2,2],[2,-2]])
Por desgracia, el argumento me gustaría utilizar viene a mí como una matriz numpy. Esa matriz siempre tiene dimensiones 2xN para algunos N, que pueden ser bastante grandes.
¿Hay alguna manera fácil de convertir eso en una tupla? Sé que podría pasar, creando una nueva tupla, pero preferiría si hay algún buen acceso que brinde la matriz numpy.
Si no es posible hacerlo tan bien como espero, ¿cuál es la forma más bonita de hacerlo mediante bucles, o lo que sea?
Buena generalización. Sin embargo, como novato de Python, me pregunto si se considera bueno usar excepciones para una condición que es casi tan común como el estado no excepcional. Al menos en C++, el control de flujo por excepciones suele desaprobarse. ¿Sería mejor probar si 'tipo (a) == numpy.ndarray'? – Mike
Esto es bastante común en python debido al concepto de "pato-tipado" y EAFT, más aquí: http://docs.python.org/glossary.html#term-duck-typing. La ventaja de este enfoque es que convertirá cualquier secuencia anidada en tuplas anidadas, no solo en una matriz. Una cosa que debería haber hecho que he solucionado es especificar qué errores quiero que maneje el bloque except. –
En C++, las excepciones son lentas en relación con las condicionales por una variedad de razones. En Python, son aproximadamente los mismos en términos de rendimiento: este es uno de los lugares en los que tenemos que comprobar nuestras intuiciones de C++ en la puerta. – dbn