2013-10-26 21 views
5

tôi có thể xác định một cấu trúc kiểu numba với:Làm thế nào để tạo một cấu trúc từ kiểu cấu trúc numba?

from numba import struct, int32 

my_struct_type = struct([('value_a', int32), ('value_b', int32)]) 

Bây giờ tôi có các loại, làm thế nào để tạo ra một cấu trúc thực tế?

+7

Bạn gửi lỗi tài liệu về 'numba' để thông báo cho họ biết ;-) –

+0

Âm thanh vô cùng hợp lý. Ở đây, có một upmod! :) –

Trả lời

2

numba.struct không còn tồn tại, bây giờ bạn có thể chỉ cần vượt qua tiêu chuẩn numpy mảng với phức tạp tùy chỉnh của bạn 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 

Lưu ý rằng sum_struct_array đang làm một phần ba là nhiều lần lặp lại, vì vậy nó không phải là một sự ngạc nhiên rằng nó nhanh hơn.

1

Một ví dụ có thể được tìm thấy trong 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) 

Các struct bạn tạo là một NumPy data type object, không phải là một loại mới thực tế bằng Python

Ví dụ mã của bạn này sẽ là:

my_struct_type = struct([('value_a', int32), ('value_b', int32)]) 
my_struct = np.array([(1, 2)], dtype=my_struct_type) 
Các vấn đề liên quan