Dizilemez sayıları (çok sayıda gigabayt) işaretsiz 32 bitlik girişleri depolamak için dizi modüllerini kullanıyorum. Her öğe için 4 bayt kullanmak yerine, python array.itemsize ile belirtildiği gibi 8 bayt kullanır ve pympler tarafından doğrulanır.Python dizi öğelerini belirli bir boyuta sahip olmaya zorlayabilir miyim?
örn
>>> array("L", range(10)).itemsize
8
I elemanları çok sayıda olması, bu yüzden 4 bayt içinde depolayarak yararlı olacaktır.
Numpy beni işaretsiz 32 bit ints gibi değerleri depolamak sağlayacak:
>>> np.array(range(10), dtype = np.uint32).itemsize
4
Ama sorun numpy dizin operatörü kullanılarak herhangi bir operasyon olması yaklaşık iki kat daha yavaş, vektör işlemleri olmayan işlemler desteklenen bu yüzden tarafından numpy yavaştır. örn:
python3 -m timeit -s "from array import array; a = array('L', range(1000))" "for i in range(len(a)): a[i]"
10000 loops, best of 3: 51.4 usec per loop
yüzden zorundayım
python3 -m timeit -s "import numpy as np; a = np.array(range(1000), dtype = np.uint32)" "for i in range(len(a)): a[i]"
10000 loops, best of 3: 90.4 usec per loop
vs ya ben istiyorum veya program istediğim iki kat yavaş çalışacağını iki katı kadar bellek kullanır. Bunun etrafında bir yolu var mı? Python dizilerini belirtilen itemsize kullanmaya zorlayabilir miyim?
https://bugs.python.org/issue26821 –
Bu yanlış bir ikilemdir: programınız daha az bellek kullanabilir ve daha hızlı olabilir. Farklı platformlarda sabit boyutlu 'dizi 'öğeleri kullanıp kullanamayacağınız sorusuyla ilgisi olmamasına rağmen (' dizi' muhtemelen platforma özgü C tipi boyutları kullanır). Ayrı bir sorudur: belirli numpy tabanlı hesaplamaları daha hızlı nasıl yapılır. – jfs