簡體   English   中英

Numpy:是否有數組大小限制?

[英]Numpy: Is there an array size limit?

我正在學習使用Numpy,我想在數字列表的總和中看到速度差異所以我制作了這段代碼:

np_array = numpy.arange(1000000)
start = time.time()
sum_ = np_array.sum()
print time.time() - start, sum_

>>> 0.0 1783293664

python_list = range(1000000)
start = time.time()
sum_ = sum(python_list)
print time.time() - start, sum_

>>> 0.390000104904 499999500000

python_list總和是正確的。

如果我使用總和為1000的相同代碼,則兩者都打印正確的答案。 Numpy數組的長度是上限還是Numpy sum函數?

謝謝你的幫助

當數字大於32位int時,標准列表切換到使用long類型進行算術運算。

numpy數組沒有切換為long,並且遭遇整數溢出。 速度的價格是允許的較小值范圍。

>>> 499999500000 % 2**32
1783293664L

Numpy正在創建一個32位無符號整數的數組。 當它們相加時,它將它們相加為32位值。

if 499999500000L % (2**32) == 1783293664L:
    print "Overflowed a 32-bit integer"

您可以在陣列創建時顯式選擇數據類型:

a = numpy.arange(1000000, dtype=numpy.uint64)
a.sum() -> 499999500000

請注意, 499999500000 % 2**32完全等於1783293664 ...即,numpy正在進行模2 * 32的操作,因為這是你告訴它使用的numpy.array的類型。

例如,使np_array = numpy.arange(1000000, dtype=numpy.uint64) ,你的總和就會好(雖然當然還有限制,任何有限大小的數字類型)。

你可以使用dtype=numpy.object告訴numpy該數組包含通用的Python對象; 當然,隨着普遍性的增加,表現會衰退。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM