numba-typengerror:无法确定numba类型<class'builtin_function_或_method'>

2024-04-24 06:20:51 发布

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

我有一个简单的功能,排名扑克手(手是字符串)。

我用rA,rB = rank(a),rank(b)调用它,这里是我的实现。如果没有@jit(nopython=True),它可以很好地工作,但是如果使用它,它会失败:

   File "C:/Users/avi_na/Desktop/poker.py", line 190, in <module>
        rA,rB = rank(a),rank(b)

      File "C:\Continuum\anaconda3\lib\site-packages\numba\dispatcher.py", line 344, in _compile_for_args
        reraise(type(e), e, None)

      File "C:\Continuum\anaconda3\lib\site-packages\numba\six.py", line 658, in reraise
        raise value.with_traceback(tb)

TypingError: cannot determine Numba type of <class 'builtin_function_or_method'>

from numba import jit
from numba.types import string

@jit(nopython=True)
def rank(hand):
#    assert(len(hand) == 5)
    rank = "N/A"

    p = pd.Series([h[0] for h in hand]).value_counts()
    v = sorted(set(pd.Series([h[0] for h in hand]).values), reverse=True)
    s = sorted(hand, key=lambda k:k[0])    
    z = zip(s,s[1:])

    if all(x[0]==y[0]-1 for x,y in z):
        rank = "Straight "

    if len(set([h[1] for h in hand])) == 1:
        rank += "Flush "

    if "Straight Flush" in rank and sum([h[0] for h in hand]) == sum([10,11,12,13,14]):
        rank = "Royal Flush"

    elif p[p.idxmax()] == 4:
        rank = "4 Of A Kind : %d" % p.idxmax()

    elif p[p.idxmax()] == 3 and p[p.idxmin()] == 1:
        rank = "3 Of A Kind : %d" % p.idxmax()

    elif p[p.idxmax()] == 3 and p[p.idxmin()] == 2:
        rank = "Full House : %d,%d" % (p.idxmax(), p.idxmin())

    elif p[p.idxmax()] == 2:
        max2 = p.nlargest(2)

        if list(max2) == [2,2]:
            max2 = sorted(list(max2.keys()), reverse=True)
            rank = "2 Pairs : %d,%d" % (max2[0],max2[1])
        else:
            rank = "Pair : %d" % p.idxmax()

    else:
        rank = "High Card : %d" % v[0]


    return rank

Tags: inpytrueforiflinejitfile
1条回答
网友
1楼 · 发布于 2024-04-24 06:20:51

代码中的Pandas和其他几个函数调用不能与nopython=True一起工作。nopython中可以与numba jit一起使用的可用库相当有限(几乎仅限于numpy数组和某些python内置库)。您可以找到更多信息here

相关问题 更多 >