我是Python编程的新手。 我有以下Python 3.6代码:
import numpy as np
from numba import jit
@jit(nopython=True)
def genarray(rows, cols):
"""return a new matrix"""
return np.zeros([rows, cols], float)
L1 = 5
C1 = 5
B = genarray(L1, C1)
print(type(B))
编译时,我得到以下错误:
TypingError: >Invalid usage of Function(<built-in function zeros>) with parameters (list(int64), Function(<class 'float'>))
* parameterized
我尝试使用np.float, np.float64
并获得错误。代码在没有nopython=true
选项的情况下编译正常。
如何用矩阵解决错误?因为使用vector,代码编译好了
使用nopython=true
选项。
答案 0 :(得分:2)
我认为担心numba的担忧可能不是最富有成效的道路。也就是说,您可以通过将元组而不是列表传递给np.zeros
并使用np.float64
来实现目标:
>>> @jit(nopython=True)
... def genarray(rows, cols):
... """return a new matrix"""
... return np.zeros((rows, cols), np.float64)
...
>>> L1 = 5
>>> C1 = 5
>>> B = genarray(L1, C1)
>>> print(type(B))
<class 'numpy.ndarray'>
>>> B
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
如果这看起来很挑剔,那么你是对的:但这是目前使用numba的权衡。