Матричные функции Numpy с Numba

Я новичок в программировании на 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.

Как решить ошибку с матрицами? Потому что с вектором код компилируется нормально с опцией nopython=true.


person user599395    schedule 20.02.2018    source источник
comment
Если вы новичок в Python (и я предполагаю, что numpy), почему вы играете с numba? Это расширенный инструмент, предназначенный для ускорения итерационных numpy вычислений. Можете ли вы написать эту функцию без numba? Это слишком медленно?   -  person hpaulj    schedule 20.02.2018


Ответы (1)


Я поддерживаю опасение, что беспокойство о онемении в этот момент может быть не самым продуктивным путем. Тем не менее, вы можете достичь своей цели, передав кортеж, а не список, в 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.

person DSM    schedule 20.02.2018