我正在使用數組模塊來存儲大量數字(許多千兆字節)的無符號32位整數。 python使用8個字節,而不是每個元素使用4個字節,如array.itemsize所示,並由pympler驗證。我可以強制python數組元素具有特定的大小嗎?
例如:
>>> array("L", range(10)).itemsize
8
我有一個大數量的元素,所以我會從內的4個字節存儲它們受益。
numpy的會讓我的值存儲爲32位無符號整型:
>>> np.array(range(10), dtype = np.uint32).itemsize
4
但問題是,使用numpy的索引操作員的操作大約是慢一倍,所以支持不屬於矢量運算操作由numpy緩慢。 如:
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
VS
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
所以我被迫使用兩倍的內存,因爲我想,或者該程序將運行兩次,因爲我想慢。有沒有解決的辦法?我可以強制Python數組使用指定的itemsize嗎?
https://bugs.python.org/issue26821 –
這是一個虛假的二分法:你的程序可以使用更少的內存並且速度更快。雖然它與您是否可以在不同平臺上使用固定大小的'array'項目無關('array'可能使用平臺本機的C型大小)。這是一個單獨的問題:如何更快地製作特定的基於numpy的計算。 – jfs