Mapa de bits monocromático rápido de Python

Quiero implementar una cuadrícula monocromática de 1024x1024, necesito leer datos de cualquier celda e insertar rectángulos con varias dimensiones, he intentado hacer una lista en la lista (y usarla como una matriz 2d), lo que encontré es que la lista de valores booleanos es más lenta que la lista de enteros ... he probado la lista 1d, y fue más lento que el 2d, numpy es más lento unas 10 veces que la lista estándar de Python, la forma más rápida que he encontrado es PIL y mapa de bits monocromático usado con el método "cargar" , pero quiero que se ejecute mucho más rápido, así que intenté compilarlo con shedskin, pero desafortunadamente no hay soporte para pil allí, ¿conoce alguna forma de implementar dicha cuadrícula más rápido sin volver a escribirlo en c o c ++?

preguntado el 09 de enero de 11 a las 01:01

Me sorprende que NumPy haya sido lento para ti. ¿Cómo lo estabas usando? Esperaría que su sintaxis de corte funcione muy bien para establecer rectángulos en un valor dado. Además, ¿con qué tipos de pruebas realizó la prueba? -

Dependiendo de su sistema operativo, es posible que pueda encontrar una interfaz de Python que se comunique directamente con la GUI subyacente que se está utilizando y que probablemente tenga primitivas gráficas disponibles para hacer todo lo que desee. -

3 Respuestas

La sugerencia de Raph de usar una matriz es buena, pero no ayudará en CPython, de hecho, esperaría que sea un 10-15% más lenta, sin embargo, si la usa en PyPy (http://pypy.org/) Esperaría excelentes resultados.

Respondido el 09 de enero de 11 a las 05:01

Una cosa que podría sugerir es usar la clase de matriz incorporada de Python (http://docs.python.org/library/array.html), con un tipo de 'B'. La codificación será más simple si usa un byte por píxel, pero si desea ahorrar memoria, puede empaquetar 8 en un byte y acceder usando su propia manipulación de bits.

Respondido el 09 de enero de 11 a las 04:01

Yo miraría en Cython que traduce Python en C que se compila fácilmente (o se compila para usted si usa distutils). Simplemente compilar su código en Cython lo hará más rápido para algo como esto, pero puede obtener una aceleración mucho mayor agregando algunas declaraciones cdef. Si usted úsalo con Numpy, luego puede acceder rápidamente a las matrices Numpy. La aceleración puede ser bastante grande usando Cython de esta manera. Sin embargo, sería más fácil ayudarlo si proporcionara algún código de ejemplo.

Respondido el 09 de enero de 11 a las 09:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.