In Python, quanto può essere grande un array/lista? Ho bisogno di un array di circa 12000 elementi. Sarò ancora in grado di eseguire metodi array/list come l'ordinamento, ecc.?Quanto grande può ottenere una matrice Python?
risposta
In base allo source code, la dimensione massima di un elenco è PY_SSIZE_T_MAX/sizeof(PyObject*)
.
PY_SSIZE_T_MAX
è definita pyport.h essere ((size_t) -1)>>1
In un sistema a 32 bit regolare, questo è (4294967295/2)/4 o 536870912.
Pertanto, la dimensione massima di un elenco pitone su un po '32 sistema è 536,870,912 elementi.
Fintantoché il numero di elementi presenti è uguale o inferiore a questo, tutte le funzioni di elenco devono funzionare correttamente.
Perché 'sizeof (PyObject *) == 4?'? Cosa rappresenta questo? – Matt
@Matt, è il numero di byte di un singolo 'PyObject *'. Quella cosa è un cosiddetto puntatore (li riconosci a causa dell'esterix alla fine). I puntatori sono lunghi 4 byte e memorizzano un indirizzo di memoria sull'oggetto assegnato. Sono "solo" 4 byte perché con 4 byte è possibile indirizzare ogni elemento in una memoria dei computer attuali. –
Vale la pena notare (come risposta di Álvaro Justen indica) che su altre macchine, in particolare quelli che utilizzano sistemi a 64 bit, il valore di 'PY_SSIZE_T_MAX' può molto notevolmente. –
12000 elementi non sono nulla in Python ... e in realtà il numero di elementi può arrivare fino all'interfaccia Python che ha memoria sul sistema.
Direi che sei limitato solo dalla quantità totale di RAM disponibile. Ovviamente più grande è l'array, più saranno necessarie le operazioni più lunghe.
Generalmente vero, ma non tutti - l'accodamento rimane ammortizzato a tempo costante indipendentemente dalla dimensione dell'array. – cdleary
Interessante, grazie per il commento. –
Sicuro, è OK. In realtà si può vedere di persona facilmente:
l = range(12000)
l = sorted(l, reverse=True)
Esecuzione dei quelle linee sulla mia macchina ha avuto:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
Ma sicuro come tutti gli altri ha detto. Più grande è l'array, più lenti saranno le operazioni.
Il tempismo in questo modo può essere fuorviante - la maggior parte del tempo è dedicato all'avvio dell'interprete Python. Un modo migliore è: python -m timeit.py "l = range (12000); l = sorted (l, reverse = True)". Sulla mia macchina questo dà circa 1/20 del tempo per questo esempio. –
@dF, hai ragione riguardo alla precisione. Grazie per averlo notato Volevo solo dimostrare un punto. E l'esempio lo dimostra. –
@dF: Fantastico! 0.024s era troppo lungo per me e sono contento di poter smettere di preoccuparmene ora. –
In codice casuale ho creato elenchi con milioni di elementi. Credo che l'implementazione di liste di Python sia vincolata solo dalla quantità di memoria sul tuo sistema.
Inoltre, i metodi elenco/funzioni dovrebbero continuare a funzionare nonostante le dimensioni dell'elenco.
Se ti interessano le prestazioni, potrebbe essere utile esaminare una libreria come NumPy.
Performance characteristics for lists sono descritti su Effbot.
Gli elenchi di Python sono in realtà implementati come vettore per l'accesso casuale rapido, quindi il contenitore in pratica contiene tutti gli elementi quanti sono gli spazi in memoria. (È necessario spazio per i puntatori contenuti nell'elenco e lo spazio in memoria per gli oggetti puntati.)
L'aggiunta è O(1)
(complessità costante ammortizzata), tuttavia, inserendo/eliminando dal centro di la sequenza richiederà un riordino O(n)
(complessità lineare), che diventerà più lento del numero di elementi nell'elenco.
La domanda di ordinamento è più sfumata, poiché l'operazione di confronto può richiedere una quantità di tempo illimitata. Se stai eseguendo confronti molto lenti, ci vorrà molto tempo, anche se non è colpa di Python's list data type.
L'inversione impiega solo il tempo necessario per scambiare tutti i puntatori nell'elenco (necessariamente O(n)
(complessità lineare), poiché si tocca ogni puntatore una volta).
Come Python documentation says:
sys.maxsize
Il grande numero intero positivo supportato dal tipo Py_ssize_t della piattaforma, e quindi le liste dimensione massima, stringhe, dicts, e molti altri contenitori possono avere.
in Risorse del computer (Linux x86_64):
>>> import sys
>>> print sys.maxsize
9223372036854775807
Non v'è alcuna limitazione di numero dell'elenco. Il motivo principale che causa il tuo errore è la RAM. Si prega di aggiornare la dimensione della memoria.
-1, perché in realtà non rispondere alla domanda, e in realtà è fuorviante, perché (come mostrato da altre risposte) Lista ha effettivamente un taglia massima. –
- 1. Quanto è grande/può creare un cookie?
- 2. Trama Python Grande matrice usando matplotlib
- 3. Quanto grande può un id entrare in PostgreSQL
- 4. Win32 quanto può essere grande la risorsa personalizzata?
- 5. Inversione matrice grande
- 6. composizione tipografica una grande matrice LaTeX
- 7. Quanto è grande, piccolo, normale, grande e grande?
- 8. Calcolo inverso di una matrice molto grande
- 9. Come una grande matrice alloca la memoria?
- 10. Una funzione è più grande di una matrice?
- 11. efficiente centrare una grande matrice R
- 12. Grande moltiplicazione matrice su gpu
- 13. Quanto è grande la GRANDE? (team di sviluppo)
- 14. Quanto può essere lunga una pagina web?
- 15. Moltiplicazione grande matrice numpy efficiente
- 16. Quanto è grande la possibilità di ottenere una collisione UUID.randomUUID Java?
- 17. Quanto grande dovrebbe un'immagine UIBarButtonItem essere?
- 18. Quanto è grande wchar_t con GCC?
- 19. Quanto velocemente si può ottenere "la ricerca del massimo in un array"?
- 20. Grande matrice per eseguire glmnet()
- 21. Python: Sostituzione di valori in una matrice
- 22. Stringa molto grande nella matrice di byte
- 23. Quanto è costoso calcolare gli autovalori di una matrice?
- 24. Ottenere gli indici degli elementi n più grande in una matrice
- 25. Qt :: Quanto può essere piccolo?
- 26. Applicare PCA su matrice sparse molto grande
- 27. Quanto può essere grande il carico utile quando si inviano dati tramite WatchConnectivity?
- 28. Memorizzare efficientemente una matrice grande ma di basso grado
- 29. come creare una matrice molto grande usando matlab
- 30. C++ concatenare due array int in una più grande matrice
C'è una grande differenza tra array e liste in python. – recursive