Индексация Numba по типу записи (структурированный массив в numpy)Python

Программы на Python
Anonymous
Индексация Numba по типу записи (структурированный массив в numpy)

Сообщение Anonymous »

У меня есть структурированный массив numpy, и я передаю один элемент в функцию, как показано ниже.

Код: Выделить всё

from numba import njit
import numpy as np

dtype = np.dtype([
("id", "i4"), ("qtrnm0", "S4"), ("qtr0", "f4"),
])
a = np.array([(1, b"24q1", 1.0)], dtype=dtype)

@njit
def upsert_numba(a, sid, qtrnm, val):
a[1] = qtrnm
a[2] = val
#i = 0
#a[i+1] = qtrnm
#a[i+2] = val
return a

x = (1, b"24q2", 3.0)
print(upsert_numba(a[0].copy(), *x))
Приведенный выше код работает без проблем. Но если обновление происходит через закомментированные коды, т. е. i=0;a[i+1]=qtrnm;a[i+2]=val, numba выдает следующую ошибку.

Код: Выделить всё

No implementation of function Function() found for signature:

>>> setitem(Record(id[type=int32;offset=0],qtrnm0[type=[char x 4];offset=4],qtr0[type=float32;offset=8];12;False), int64, readonly bytes(uint8, 1d, C))
Похоже, что индексирование разрешено только по константе, которая может быть целым числом или CharSeq, известным во время компиляции, но не выражением константы, которое также известно во время компиляции. время однако. Могу ли я узнать, что происходит под капотом?
Я пробовал другую константу в качестве индекса, например "j=i; a[j]", которая также работает. Но неудивительно, что «j=i+1;a[j]» терпит неудачу.

Подробнее здесь: https://stackoverflow.com/questions/787 ... y-in-numpy

Вернуться в «Python»