我为以下代码得到了非常奇怪的时间:
import numpy as np
s = 0
for i in range(10000000):
s += np.float64(1) # replace with np.float32 and built-in float
Run Code Online (Sandbox Code Playgroud)
为什么float64比两倍慢float?为什么float32比float64慢5倍?
有没有办法避免使用的惩罚np.float64,并有numpy功能返回内置float而不是float64?
我发现使用numpy.float64比Python的浮点慢得多,numpy.float32甚至更慢(即使我在32位机器上).
numpy.float32在我的32位机器上.因此,每次我使用各种numpy函数时numpy.random.uniform,我将结果转换为float32(以便以32位精度执行进一步的操作).
有没有办法在程序或命令行中的某处设置单个变量,并使所有numpy函数返回float32而不是float64?
编辑#1:
在算术计算中,numpy.float64 比浮点慢10倍.它非常糟糕,甚至在计算之前转换为浮动和返回使程序运行速度提高了3倍.为什么?我能做些什么来解决它吗?
我想强调一下,我的时间安排不是由以下任何原因引起的:
我更新了我的代码,以便更清楚地解决问题所在.使用新代码,我发现使用numpy数据类型可以看到十倍的性能:
from datetime import datetime
import numpy as np
START_TIME = …Run Code Online (Sandbox Code Playgroud) 我刚刚开始知道numpy,我对它的ndarray中的内存访问类C效率的说法印象深刻.我想看看这些和pythonic列表之间的区别对于我自己,所以我进行了快速计时测试,在没有它的情况下执行一些相同的简单任务numpy.正如预期的那样,Numpy在数组的分配和算术运算中将常规列表的数量超出了一个数量级.但是这两段代码在两个测试中都相同,使用常规列表大约需要1/8秒,而numpy则需要2.5秒多一点:
file = open('timing.log','w')
for num in a2:
if num % 1000 == 0:
file.write("Multiple of 1000!\r\n")
file.close()
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样,如果有其他语法我应该用于这样的操作,以更好地利用ndarray可以做什么?
谢谢...
编辑:回答韦恩的评论......我反复和按照不同的顺序对他们进行计时,每次得到几乎相同的结果,所以我怀疑这是另一个过程.我放
start = time()Run Code Online (Sandbox Code Playgroud) 在numpy导入之后在文件的顶部然后我有类似的语句 print 'Time after traversal:\t',(time() - start)Run Code Online (Sandbox Code Playgroud) 始终.