mogę zdefiniować Numba typu struct z:Jak utworzyć strukturę z typu struct numba?
from numba import struct, int32
my_struct_type = struct([('value_a', int32), ('value_b', int32)])
Teraz mam typ, w jaki sposób stworzyć rzeczywistą struct?
mogę zdefiniować Numba typu struct z:Jak utworzyć strukturę z typu struct numba?
from numba import struct, int32
my_struct_type = struct([('value_a', int32), ('value_b', int32)])
Teraz mam typ, w jaki sposób stworzyć rzeczywistą struct?
numba.struct
już nie istnieje, możesz teraz po prostu przekazać standardowe tablice numpy
ze swoim niestandardowym skomplikowanym dtype
....
import numpy as np # version 1.10.1
import numba # version 0.22.1
@numba.jit(nopython=True)
def sum_basic_array(a):
ret = 0
for aa in a:
ret += aa
return ret
@numba.jit(nopython=True)
def sum_struct_array(a):
ret = 0
for aa in a:
ret += aa.sub_0
return ret
x_basic = np.arange(20000*3, dtype=np.uint32)
x_struct = x_basic.view(dtype=np.dtype([('sub_0', np.int32),
('sub_1', np.float64)]))
%timeit sum_basic_array(x_basic) # 18 µs
%timeit sum_struct_array(x_struct) # 8 µs
%timeit sum_struct_array(x_struct.view(np.recarray)) # 40 µs
Zauważ, że sum_struct_array
robi jedną trzecią Jak wielu iteracji, więc nie powinno być zaskoczeniem, że to szybciej.
Przykład można znaleźć w Numba documentation
record_type = struct([('x', double), ('y', double)])
record_dtype = record_type.get_dtype()
a = numpy.array([(1.0, 2.0), (3.0, 4.0)], dtype=record_dtype)
Struct tworzenia jest numpy data type object, a nie rzeczywiste nowy typ w Pythonie
Dla przykładu kodu byłoby:
my_struct_type = struct([('value_a', int32), ('value_b', int32)])
my_struct = np.array([(1, 2)], dtype=my_struct_type)
Wysyłasz błąd w dokumentacji przeciwko 'numba', aby skłonić ich do powiadomienia ;-) –
Brzmi niewiarygodnie rozsądnie. Masz tu upmod! :) –