Проблема с отражением подписи списка в Numba - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь использовать компиляцию Ahead-of-Time для одной из моих функций, и поэтому мне нужно предоставить сигнатуры для этой функции.Когда я использую numba.typeof(), я получаю обратно reflected list(array(float64, 2d, A)) для одной из моих переменных.Я смотрел на эту тему Основные проблемы со списками Python в Numba;что происходит? , чтобы попытаться выяснить сигнатуру, но я столкнулся с ошибками.

Прежде чем пытаться заставить работать компиляцию AOT, я просто пытаюсь заставить @njit работать сподписи.

Я пробовал:

@njit(float64[:,:,:](int32, list(float64), float64[:,:,:]), reflected=True)

Как я могу исправить свою подпись, чтобы она работала?Спасибо

1 Ответ

0 голосов
/ 03 января 2019

Вам необходимо правильно указать подпись вашего list.Это означает решение нескольких проблем в вашем коде:

  • reflected=True должно быть аргументом вашего вызова класса List класса
  • Я не знаю, как и гдеВы импортируете list.Если вы не импортировали его, это не тип numba.Если вы импортировали что-то как list, вы перезаписали встроенный модуль python list.Вы должны НИКОГДА сделать это.Поэтому вместо списка я напишу nb.types.List(...), предполагая, что вы импортируете numba с import numba as nb.Если вы импортировали numba с from numba import *: это еще одна вещь, которую вам следует избегать любой ценой.
  • тип float64, который хранится в вашем списке, необходимо указать более точно.В вашем отраженном списке есть массив типа array(float64, 2d, A).Это означает, что ваша подпись списка должна содержать именно этот тип массива.В этом случае это будет выглядеть так: nb.float64[:, :].Для других макетов памяти, таких как C- или F-, посмотрите на этот пост .

Таким образом, ваша итоговая подпись будет выглядеть так:

@nb.njit(nb.float64[:, :, :](nb.int32, nb.types.List(nb.float64[:, :], reflected=True), nb.float64[:, :, :]))

Снова при условии, что вы импортируете numba с import numba as nb и ваш массив имеет тип array(float64, 2d, A).

...