ndarray函数不会在numba/JIT中编译

2024-09-29 17:09:54 发布

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

更新: 看起来,.sort()在使用JIT时,对于ndarrays根本不支持? 我的ndarray如下所示,我总是在函数中任何应该是jittet的地方有一个.sort()时得到numba错误? 真的没有办法在jittet函数中对数据数组进行排序吗

我已经为如何使用Numba/JIT编译代码而苦苦挣扎了两天(我认为它被称为nopython模式):

import numpy as np

Nmax=10000
T=50000
MyObject = np.dtype([('x','i4'),('y','i1'),('v','i1'),('vmax','i1'),('b','i1')])

for N in range(Nmax,100):
    A = np.zeros(N, dtype=MyObject)
    # Then A is filled with initial values
    # ...
    e,f,g=function(A,N)

@jit
def function(A,N):
    
    for t in range(T):
        Lane = np.array([(A[np.where(A['y']==0)]), (A[np.where(A['y']==1)])])
        Lane.sort(order='x')
        B = np.array(Lane['b'])
        V = np.array(Lane['v'])

        for n in range(N):
            # do some calculation here
            # ...
        
        A=Lane.flatten()
    
    return #...some calculated values for e,f,g

如果没有@jit decorator,它运行得很好,到目前为止产生了所有正确的结果,但实际上比使用@jit的早期版本慢1000倍(甚至更多)。(通常编译运行需要5-6分钟,如果没有@jit,我已经让它运行了12个小时,甚至不到5%)

我可能不使用a.flatte()命令,但特别是如果我不能使用ndarray.sort(),我将不得不重新考虑我的整个(现在正在运行的)概念,几乎从头开始整个项目


Tags: 函数infornprangesortarrayjit

热门问题