En Python, ¿cuán grande puede ser una matriz/lista? Necesito una matriz de alrededor de 12000 elementos. ¿Todavía podré ejecutar métodos de matriz/lista como ordenar, etc.?¿Qué tan grande puede obtener una matriz de Python?
Respuesta
De acuerdo con source code, el tamaño máximo de una lista es PY_SSIZE_T_MAX/sizeof(PyObject*)
.
PY_SSIZE_T_MAX
se define en pyport.h ser ((size_t) -1)>>1
En un sistema de 32 bits regular, esto es (4294967295/2)/4 o 536870912.
Por lo tanto el tamaño máximo de una lista pitón en un poco 32 el sistema es 536,870,912 elementos.
Siempre que la cantidad de elementos que tenga sea igual o inferior a esta, todas las funciones de la lista deberían funcionar correctamente.
¿Por qué 'sizeof (PyObject *) == 4?'? ¿Qué representa esto? – Matt
@Matt, es el número de bytes de un solo 'PyObject *'. Esa cosa es un puntero llamado (los reconoces por el asterisco al final). Los punteros tienen una longitud de 4 bytes y almacenan una dirección de memoria para el objeto asignado. Son "solo" de 4 bytes de longitud porque con 4 bytes puede abordar cada elemento en una memoria de las computadoras de hoy en día. –
Vale la pena señalar (como indica la respuesta de Álvaro Justen) que en otras máquinas, especialmente las que ejecutan sistemas de 64 bits, el valor de 'PY_SSIZE_T_MAX' puede ser muy grande. –
12000 elementos no es nada en Python ... y en realidad la cantidad de elementos puede llegar tan lejos como el intérprete de Python tenga memoria en su sistema.
Diría que solo está limitado por la cantidad total de RAM disponible. Obviamente, cuanto mayor sea el conjunto, más operaciones durará.
Generalmente cierto, pero no todos ellos, los restos añadidos se amortizan a tiempo constante independientemente del tamaño de la matriz. – cdleary
Interesante, gracias por el comentario. –
Seguro, está bien. En realidad se puede ver por sí mismo fácilmente:
l = range(12000)
l = sorted(l, reverse=True)
Ejecución de los esas líneas en mi máquina tomó:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
Pero seguro que todos los demás dijeron. Cuanto más grande sea la matriz, más lentas serán las operaciones.
La sincronización de este modo puede ser engañosa; la mayor parte del tiempo se emplea para iniciar el intérprete de Python. Una mejor manera es: python -m timeit.py "l = range (12000); l = ordenado (l, reverse = True)". En mi máquina, esto da aproximadamente 1/20 de las veces para este ejemplo. –
@dF, tiene razón acerca de la precisión. Gracias por notar eso. Solo quería demostrar un punto. Y el ejemplo lo demuestra. –
@dF: ¡Impresionante! 0.024s fue demasiado tiempo para mí y me alegro de poder dejar de preocuparme por eso ahora. –
En código casual, he creado listas con millones de elementos. Creo que la implementación de las listas de Python solo está vinculada por la cantidad de memoria en su sistema.
Además, los métodos/funciones de la lista deben seguir funcionando a pesar del tamaño de la lista.
Si le importa el rendimiento, puede valer la pena consultar una biblioteca como NumPy.
Performance characteristics for lists se describen en Effbot.
Las listas de Python se implementan realmente como vector para un acceso aleatorio rápido, por lo que el contenedor básicamente contendrá tantos elementos como espacio haya en la memoria. (Necesita espacio para los punteros que figuran en la lista, así como espacio en la memoria para los objetos a los que se apunta.)
Adjuntar es O(1)
(complejidad constante amortizada), sin embargo, insertar en/borrar desde el medio de la secuencia requerirá un reordenamiento O(n)
(complejidad lineal), que se volverá más lenta a medida que la cantidad de elementos en su lista.
Su pregunta de clasificación tiene más matices, ya que la operación de comparación puede llevar un tiempo ilimitado. Si está realizando comparaciones realmente lentas, llevará mucho tiempo, aunque no es culpa de Python's list data type.
La reversión solo lleva la cantidad de tiempo necesaria para intercambiar todos los punteros de la lista (necesariamente O(n)
(complejidad lineal), ya que toca cada puntero una vez).
Como el Python documentation says:
sys.maxsize
El número entero positivo más grande soportado por tipo Py_ssize_t de la plataforma, y por lo tanto las listas de tamaño máximo, secuencias, Dicts, y muchos otros contenedores pueden tener.
En mi equipo (Linux x86_64):
>>> import sys
>>> print sys.maxsize
9223372036854775807
No hay limitación del número de lista. El motivo principal que causa su error es la memoria RAM. Actualice el tamaño de su memoria.
-1 porque en realidad no responde la pregunta, y en realidad es engañosa porque (como se muestra en otras respuestas) la lista sí tiene un talla máxima. –
- 1. ¿Por qué es GHC tan grande/grande?
- 2. ¿Qué tan grande es demasiado grande para una tabla MySQL?
- 3. Win32 ¿Qué tan grande puede ser el recurso personalizado?
- 4. ¿Qué tan grande puede ser un archivo mapeado en memoria?
- 5. ¿Qué tan grande es la sesión Meteor
- 6. ¿Qué tan grande es demasiado grande para XP/SCRUM?
- 7. ¿Qué tan grande es una referencia de objeto en .NET?
- 8. Silverlight Install Base - ¿Qué tan grande es?
- 9. ¿Por qué Haskell es tan grande?
- 10. ¿Qué tan grande es wchar_t con GCC?
- 11. Python: ¿qué tan rápido?
- 12. ¿Qué tan grande debe ser una imagen UIBarButtonItem?
- 13. ¿Qué tan grande es una clase en la memoria?
- 14. una matriz grande en LaTeX
- 15. ¿Qué tan grande es BIG? (equipo de desarrollo)
- 16. ¿Qué tan grande puede ser un entero de 64 bits con signo?
- 17. ¿Qué tan grande es demasiado grande cuando se trata de imágenes de fondo?
- 18. ¿Cómo se determina qué tan grande es el objeto Request.Form?
- 19. ¿Por qué es tan grande un diccionario .net genérico
- 20. ¿Qué tan grande es una referencia de objeto en Java y, precisamente, qué información contiene?
- 21. ¿Por qué mi biblioteca estática es tan grande?
- 22. ¿Qué tan grande es demasiado grande para un archivo XML de fuente RSS?
- 23. ¿Qué tan grande es "demasiado grande" para un archivo de JavaScript
- 24. Qt :: ¿Qué tan pequeño se puede hacer?
- 25. Inverso de Tan en python (tan-1)
- 26. Necesito almacenar códigos postales en una base de datos. ¿Qué tan grande debe ser la columna?
- 27. ¿Qué tan grande debe inicializarse una tabla hash relacionada con el recuento de entradas?
- 28. ¿Hay una constante de qué tan grande es un GB en Cocoa?
- 29. ¿Una función es más grande que una matriz?
- 30. Python: obtenga la posición del elemento más grande en una matriz numpy
Hay una gran diferencia entre las matrices y las listas en python. – recursive