multiplicar matrices funcion elementos array agregar python c ctypes

matrices - ¿Cómo convierto una lista de Python en una matriz C utilizando ctypes?



matrices en python numpy (3)

Del tutorial de ctypes :

>>> IntArray5 = c_int * 5 >>> ia = IntArray5(5, 1, 7, 33, 99)

Si tengo los siguientes 2 juegos de código, ¿cómo los pego?

void c_function(void *ptr) { int i; for (i = 0; i < 10; i++) { printf("%p", ptr[i]); } return; } def python_routine(y): x = [] for e in y: x.append(e)

¿Cómo puedo llamar a c_function con una lista contigua de elementos en x? Traté de lanzar x a un c_void_p, pero eso no funcionó.

También traté de usar algo como

x = c_void_p * 10 for e in y: x[i] = e

pero esto obtiene un error de sintaxis

El código C claramente quiere la dirección de una matriz. ¿Cómo hago que esto suceda?


El siguiente código funciona en listas arbitrarias:

import ctypes pyarr = [1, 2, 3, 4] arr = (ctypes.c_int * len(pyarr))(*pyarr)


Esta es una explicación de la respuesta aceptada.

ctypes.c_int * len(pyarr) crea una matriz (secuencia) de tipo c_int de longitud 4 ( python3 , python 2 ). Como c_int es un objeto cuyo constructor toma un argumento, (ctypes.c_int * len(pyarr)(*pyarr) hace un inicio de una toma de cada instancia de pyarr desde pyarr . Una forma más fácil de leer es:

pyarr = [1, 2, 3, 4] seq = ctypes.c_int * len(pyarr) arr = seq(*pyarr)

Use la función type para ver la diferencia entre seq y arr .