Что такое сигнатура для массива нулевого измерения в numba - PullRequest
0 голосов
/ 05 марта 2019

numba.jit() позволяет вводить сигнатуру типа, но я не могу понять, что такое сигнатура для массива нулевого измерения.

Например:

numba.jit('void(float32, float32[:])')

говорит, что функция возвращаетявляется пустым, и входными аргументами являются скалярный массив float32 и одномерный массив float32.

Но что вместо скаляра я хочу передать в 0-мерном массиве.Какая подпись типа?Я попробовал очевидное float32[], но, похоже, это не сработало.

Если вам интересно, как получить массив 0-D в numpy, вы делаете это так:

a = numpy.array(2)

, который отличается от

a = numpy.array([2])

, последний является массивом 1-D.

1 Ответ

0 голосов
/ 05 марта 2019

Вот как вы можете это сделать, используя numba.types.Array:

import numba as nb
import numpy as np

#        |---------0d int array---------|
@nb.njit(nb.types.Array(nb.int64, 0, "C")())
def func():
    return np.array(2)

Здесь я использовал, что возвращаемое значение будет C-непрерывным int64 массивом с 0 размеры.Настройте их по мере необходимости.


По моему опыту, редко встречается сценарий использования (см. «Преимущества и ограничения компиляции с опережением времени» ) для функций с явным типом вnumba - за исключением времени компиляции или в случае, когда нужно избегать использования numba уже выведенных типов, когда он должен скомпилировать новую функцию.Так что лично я бы не использовал эти подписи.

...