针对大数组,numpy.dot是否会出现错误?我使用的是一台4 GHz Intel Core i7处理器和32 GB 1600 MHz DDR3内存的iMac。我进行了一个简单的实验,比较了使用for循环和向量化计算从1到一个大数的平方和。当总和足够大时,向量化方法是错误的。请参见下面的实验:
i = 3024617
sum([j**2 for j in range(1,i)]) - np.dot(np.arange(1,i,dtype=np.int64), np.arange(1,i, dtype=np.int64))
i = 3024618
sum([j**2 for j in range(1,i)]) - np.dot(np.arange(1,i,dtype=np.int64), np.arange(1,i, dtype=np.int64))
第一个差异 - 对于任何i < 3024617,差异为0
第二个差异 - 对于任何i >= 3024618,差异为一个大整数
我希望对于所有整数i,这个差异都是0。
np.dot
与x=np.arange(1,i,dtype=object)
匹配 Python 的 sum。但它比np.int64
版本慢得多。 - hpaulj