我如何使此函数将数组的数组作为输入通过numba编译?

问题描述 投票:1回答:1

该功能的签名是

def SLBQP(Q, q, u, a, x, eps=1e-6, maxIter=1000):

它返回一个float64。

参数的类型是:

Q -- np.array([[1., 2.], [4., 5.]])
q -- np.array([1.,2.,3.,4.])
u -- a scalar
a -- np.array([1.,2.,3.,4.])
x -- np.array([1.,2.,3.,4.])

我尝试过

@jit('f8(f8[:,:], f8[:], f8, f8[:], f8[:], f8, i4)',nopython=True)
def SLBQP(Q, q, u, a, x, eps=1e-6, maxIter=1000):

它给了我这个错误:

Invalid use of Function(<built-in function array>) with argument(s) of type(s): (array(float64, 1d, C))
 * parameterized
In definition 0:
    TypingError: array(float64, 1d, C) not allowed in a homogeneous sequence
    raised from /Users/gerardozinno/Desktop/ProgettoML/venv/lib/python3.8/site-packages/numba/typing/npydecl.py:472
In definition 1:
    TypingError: array(float64, 1d, C) not allowed in a homogeneous sequence
    raised from /Users/gerardozinno/Desktop/ProgettoML/venv/lib/python3.8/site-packages/numba/typing/npydecl.py:472

我也尝试过:

@jit('numba.float64(numba.array(float64, 2d, C), numba.array(float64, 1d, C), numba.float64, numba.array(float64, 1d, C), numba.array(float64, 1d, C), numba.float64, numba.int64)',nopython=True)

它给了我一个语法错误。

python python-3.x numpy scipy numba
1个回答
0
投票

这无误。

import numba as nb
import numpy as np

@nb.njit('f8(f8[:,:], f8[:], f8, f8[:], f8[:], f8, i4)')
def SLBQP(Q, q, u, a, x, eps=1e-6, maxIter=1000):
    return 1.

Q = np.array([[1., 2.], [4., 5.]])
q = np.array([1.,2.,3.,4.])
u = 50
a = np.array([1.,2.,3.,4.])
x = np.array([1.,2.,3.,4.])

result = SLBQP(Q, q, u, a, x, eps=1e-6, maxIter=1000)

我更改了您的示例Q变量(我认为是一个错字),但是否则我无法复制您的语法错误。我猜您传递给函数的Q是1D数组,而不是您认为的2D数组。查看Q.shapeQ.flags进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.