Как я могу использовать Numba "@vectorize" ufun c со структурированным массивом Numpy? - PullRequest
2 голосов
/ 25 февраля 2020

Я не могу запустить векторизованный ufun c. Обычный @njit работает нормально, а документация @ vectorize предполагает, что декораторы векторизации такие же, как njit. Я работаю на Windows 10, если это имеет значение

Демонстрационная программа выглядит следующим образом. Из приведенного ниже вывода видно, что функция njit работает без происшествий, и имеется ошибка типа с векторизованной функцией.

import sys
import numpy
import numba

Structured = numpy.dtype([("a", numpy.int32), ("b", numpy.float64)])
numba_dtype = numba.from_dtype(Structured)

@numba.njit([numba.float64(numba_dtype)])
def jitted(x):
    x['b'] = 17.5
    return 18.

@numba.vectorize([numba.float64(numba_dtype)], target="cpu", nopython=True)
def vectorized(x):
    x['b'] = 17.5
    return 12.1

print('python version = ', sys.implementation.version)    
print('numpy version = ', numpy.__version__)
print('numba version = ', numba.__version__)
for struct in numpy.empty((3,), dtype=Structured):
    print(jitted(struct))

print(vectorized(numpy.empty((3,), dtype=Structured)))

А на выходе получается

python version = sys.version_info (major = 3, minor = 7, micro = 1, releaselevel = 'final', serial = 0)
numpy version = 1.17.3
numba version = 0.48.0
18.0
18.0
18.0
Traceback (последний вызов был последним): файл "scratch.py", строка 49, в
print (векторизация (numpy .empty ((3,)), dtype = Structured))) TypeError: ufun c «векторизация» не поддерживается для типов ввода, и входы не могут быть безопасно приведены к каким-либо поддерживаемым типам в соответствии с правилом приведения «safe» '

1 Ответ

1 голос
/ 03 марта 2020

Похоже, что это не поддерживается, было преобразовано в запрос функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...