Esta es la pregunta de Python. Tengo una variable AEn Python, ¿cómo acceder a una matriz uint16 [3] envuelta por SWIG (es decir, desenvolver un PySwigObject)?
>>> A
<Swig Object of type 'uint16_t *' at 0x8c66fa0>
>>> help(A)
class PySwigObject(object)
Swig object carries a C/C++ instance pointer
La instancia referido por A es una matriz contigua uint16 [3] y el problema es obtener acceso a la matriz a partir de Python.
En Python, ¿cómo puedo crear una variable B de longitud 3, que me da acceso de lectura/escritura a la misma memoria apuntada por el puntero en A?
Creo que el problema tiene dos partes:
- ¿Cómo obtener el puntero de A. (creo 0x8c66fa0 puntos a un objeto trago, no el objeto envuelto).
- Cómo inicializar algún tipo de matriz de Python utilizando un puntero de memoria y un tipo de datos conocido. (Numpy tiene un método frombuffer, pero lo que parece ser necesario es un método de memoria). Tal vez se necesite algo de casting.
Esto debería ser fácil, creo, pero he estado leyendo y la piratería durante más de un día!
Para resolver la segunda parte, creo que un ejemplo podría comenzar de esta manera:
>>> import numpy
>>> C = numpy.ascontiguousarray([5,6,7],"uint16")
>>> C
array([5, 6, 7], dtype=uint16)
>>> C.data
<read-write buffer for 0x8cd9340, size 6, offset 0 at 0x8902f00>
A continuación, tratar de construir B (de cualquier tipo de vector) usando "0x8902f00" y "uint16" y probar si el cambio de B [2] causa cambios en C [2].
Muchas gracias por sus sugerencias o un claro ejemplo.
Saludos,
Owen