Puede utilizar ctypes, y tienen un doble-array (o flotar matriz) exactamente como usted' tener en C, en lugar de mantener sus datos en una lista. Esto es justo nivel bajo, pero es una recomendación si necesita un gran rendimiento y si su lista es de un tamaño fijo.
Puede crear el equivalente de un C double array[100];
en Python haciendo:
array = (ctypes.c_double * 100)()
La expresión ctypes.c_double * 100
produce una clase de Python para una serie de dobles, 100 objetos largos. Para conectar a un archivo, sólo puede utilizar buffer
para obtener su contenido:
>>> f = open("bla.dat", "wb")
>>> f.write(buffer(array))
Si los datos ya está en una lista de Python, el embalaje en una doble matriz puede o no puede ser más rápido que llamar struct
como en respuesta aceptada de AGF - dejaré de medición, que es más rápido que la tarea, pero todo el código que necesita es la siguiente:
>>> import ctypes
>>> array = (ctypes.c_double * len(floatlist))(*floatlist)
Para verlo como una cadena, acaba de hacer: str(buffer(array))
- el único inconveniente aquí es que se tiene que ocuparse del tamaño del flotador (flotación vs doble) y del tipo de flotación dependiente de la CPU: el módulo struct puede encargarse de esto por usted.
La gran ventaja es que con una matriz flotante puede utilizar los elementos como números, accediendo entonces como si fuera una lista simple de Python, teniendo luego disponible como región de memoria planar con buffer
.
''f'' te da un C * f * loat (32 bits); usted sin duda quiere un flotador de Python también conocido como C * d * ouble (64 bits) para que usted y sus seguidores estén usando '' d'' –
Tiene razón, estaba siendo descuidado con mis tipos de datos. Pero en realidad quería flotadores de precisión simple. – MxyL