Numba-jit-nonpython和numpy的问题:所有模板都被文本拒绝

2024-09-28 03:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python3.6.7实现一个随机抽样的程序,有一个函数我不能用Numba编译。最新版本是:

import numpy as np
from numba import jit

@jit(nopython=True) 
def bs_stat_numba(data, iter_n=1000):

    iter_mean = np.mean(np.random.choice(data, size =(len(data),iter_n))) 
    iter_std = np.std(np.random.choice(data, size =(len(data),iter_n)))

    bs_mean = np.float32(np.mean(iter_mean))
    bs_std = np.float32(np.mean(iter_std))

    return bs_mean, bs_std

data = [[1,2,3,4], [12,23,45,67], [10,11,12,23,45,6]]

zkzq_dict = []
for i in tqdm(range(len(data))):
    bs_mean, bs_std = bs_stat_numba(data[i])
    zqPre_upper = bs_mean + 2*bs_std
    zqPre_lower = bs_mean - 2*bs_std
    zkzq_dict.append([zqPre_lower, zqPre_upper])




Here is the error as follows:
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of Function(<function mean at 0x7f8b7c103730>) with     argument(s) of type(s): (float32)
 * parameterized
In definition 0:
    All templates rejected with literals.
In definition 1:
    All templates rejected without literals.
This error is usually caused by passing an argument of a type that is unsupported by the named function.
[1] During: resolving callee type: Function(<function mean at 0x7f8b7c103730>)
[2] During: typing of call at <ipython-input-244-488a401000dd> (8)


File "<ipython-input-244-488a401000dd>", line 8:
def bs_stat_numba(data, iter_n=1000):
    <source elided>

    bs_mean = np.float32(np.mean(iter_mean))

我使用的版本是numba==0.45.1,numpy==1.17.2。 非常感谢你。你知道吗


Tags: ofdatalenbsisnpfunctionmean
1条回答
网友
1楼 · 发布于 2024-09-28 03:15:31

现在起作用了:

@jit(nopython=True) 
def bs_stat_numba(data, iter_n=1000):

    iter_mean = np.mean(np.random.choice(data, size =(len(data),iter_n))) 
    iter_std = np.std(np.random.choice(data, size =(len(data),iter_n)))

    bs_mean = np.float32(iter_mean)
    bs_std = np.float32(iter_std)

    return bs_mean, bs_std

data = [np.array([1,2,3,4]), np.array([12,23,45,67]), np.array([10,11,12,23,45,6])]

zkzq_dict = []
for i in tqdm(data):
    bs_mean, bs_std = bs_stat_numba(i)
    zqPre_upper = bs_mean + 2*bs_std
    zqPre_lower = bs_mean - 2*bs_std
    zkzq_dict.append([zqPre_lower, zqPre_upper])

我做了什么?你知道吗

  1. 我将列表列表(数据)替换为numpy数组列表(因为 Numba不喜欢反射列表)。您的问题不包含此错误,但我在尝试运行您的代码时得到了它,因此我也修复了它。你知道吗
  2. 我删除了你的一个np.平均值来自代码,因为,例如,iter\u mean已经是平均值了,但是您又尝试了一次计算:mean(iter\u mean)。没有理由从一个值计算平均值,所以Numba不喜欢它,并返回TypeError(我在您的问题中看到的错误)

相关问题 更多 >

    热门问题