因此,我创建了一个代码,该代码将从已经创建的列表中获取一堆随机值,该列表的长度为100000个值,这样我才能真正测试功能。在我创建的列表中,我在每个值之间使用2个随机字符。示例代码如前所示,请注意,这是在使用numba的代码之前完成的。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="def_cc">
<option value="">Select Value</option>
<option value="GBP">UK</option>
<option value="USD">USD Dollar</option>
</select>
然后,我通过一个调用numba的函数多次运行npDict,因为第一次我知道它是事先进行编译的,但是第二次仍然比不使用numba时要慢。我认为问题是我将字符串拆分为一个列表。这是我的numba函数代码:
lister = []
for i in range(0,100000):
day = i*5
hour = i*8
slope = i*9
price = i*6
volume = i
percentage = i*2
time = datetime.now()
time = time.strftime('%Y/%m/%d %H:%M:%S:%f')
lister.append(str(day)+'**'+str(hour)+'**'+str(slope)+'**'+str(price)+'**'+str(volume)+'**'+str(percentage)+'**'+str(time))
npList = np.array(dictionary)
我运行代码的方式是显示两种时间差异。如下所示。
from numba import njit
import numpy as np
@njit
def returnDayGrab(lister):
times = np.zeros_like(lister)
hours = np.zeros_like(lister)
slopes = np.zeros_like(lister)
prices = np.zeros_like(lister)
volumes = np.zeros_like(lister)
percentages = np.zeros_like(lister)
for ii, item in enumerate(lister):
#list2 = np.fromstring(item, dtype=str, sep='**')
#list2 = np.array(item.split('**'))
list2 = item.split('**')
times[ii] = list2[0]
hours[ii] = list2[1]
slopes[ii] = list2[2]
prices[ii] = list2[3]
volumes[ii] = list2[4]
percentages[ii] = list2[5]
return times, hours, slopes, prices, volumes, percentages
这是我使用numba的结果:
now1 = datetime.now()
times, hours, slopes, prices, volumes, percentages = returnDayGrab(npDict)
now2 = datetime.now()
print(now2-now1)
now1 = datetime.now()
times, hours, slopes, prices, volumes, percentages = returnDayGrab(npDict)
now2 = datetime.now()
print(now2-now1)
这是取出numba装饰器的结果:
0:00:03.217734
0:00:00.938417
如您所见,numba装饰器的两个go都消失了,它更快。正如我之前提到的,我认为是split函数使它变慢的原因是因为在我使用numba的代码中,如果不是拆分项目,而是将每个列表设置为等于项目,如下所示:< / p>
0:00:00.190655
0:00:00.203312
这是使用numba的结果:
times[ii] = item
hours[ii] = item
slopes[ii] = item
prices[ii] = item
volumes[ii] = item
percentages[ii] = item
这是没有数字的结果:
0:00:00.108041
0:00:00.048682
因此,不使用分割函数numba的速度明显更快。我想知道是否有一种有效的方法将字符串拆分为列表,或者是否还有另一种快速的选择。从我注释掉的代码中可以看到,我已经尝试0:00:00.213311
0:00:00.230100
并且尝试np.fromstring(item, dtype=str, sep='**')
来遵循numpy的速度。