在numba和numpy中访问结构化数据类型

问题描述 投票:0回答:1

我注意到numbanumpy如何允许访问具有结构化数据类型的数组的不同子字段之间存在差异。我正在测试对访问子字段和数组a的一些函数的以下定义:

import numba
import numpy

@numba.njit
def func_numba(a):
    return a[5].field0

def func_numpy(a):
    return a[5].field0

def func_numpy_recarray(a):
    return numpy.rec.array(a)[5].field0

a = numpy.zeros(10, dtype=[('field0', 'i4'), ('field1', 'f8')])
a['field0'] = numpy.arange(10)
# array([(0, 0.), (1, 0.), (2, 0.), (3, 0.), (4, 0.), (5, 0.), (6, 0.),
#        (7, 0.), (8, 0.), (9, 0.)],
#       dtype=[('field0', '<i4'), ('field1', '<f8')])

即使相同功能的“普通”版本不起作用,调用不同的功能也表明func_numba版本有效:

func_numba(a)
# 5
func_numpy(a)
# AttributeError: 'numpy.void' object has no attribute 'field0'
func_numpy_recarray(a)
# 5

通过属性访问子字段的选项通常仅由numpy记录数组提供,如功能func_numpy_recarray所示,因此我假设numba具有numpy数组的某种单独表示形式为它们定义了不同的操作。不幸的是,在numba JIT函数中检查对象的类型或属性并不容易。

这是numba与普通numpy之间的故意区别,并且在numba中访问结构化数据类型的首选方式是什么?

我正在使用numba 0.48.0版。

我注意到numba和numpy如何允许访问具有结构化数据类型的数组的不同子字段之间存在差异。我正在测试访问...

python numpy types numba
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.