有没有一种有效的方法使用numba将字符串拆分为列表?

时间:2020-08-22 05:06:26

标签: python numpy numba

因此,我创建了一个代码,该代码将从已经创建的列表中获取一堆随机值,该列表的长度为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的速度。

0 个答案:

没有答案