python - 在 numba 与 numpy 中访问结构化数据类型
问题描述
我注意到如何numba
和numpy
允许访问具有结构化数据类型的数组的不同子字段之间存在差异。我正在测试访问子字段和数组的一些函数的以下定义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
的数组的某种单独表示。不幸的是,在JIT 函数numpy
中检查对象的类型或属性并不容易。numba
这是numba
和普通之间的故意区别吗?numpy
访问结构化数据类型的首选方式是numba
什么?
我使用的是numba
0.48.0 版。
解决方案
推荐阅读
- wix - MSI 多次安装相同版本的应用程序?
- nginx - 为什么 HLS 流式传输占用如此多的 CPU?
- mysql - 如何使用 Yii 后端查询网页的源数据库?
- android - 为什么尽管有 -dontwarn 和 -keep 类,ProGuard 仍然会发出警告?
- go - Golang 接口上的指针接收器和值接收器
- c# - ControlTemplate 中的 UWP TemplateBinding 到固定值
- html - 在 Vue js -> v-model 我如何集成 vlaue?
- r - 当序列包含间隙时如何计算序列之间的差异?
- python - 删除包含特定键的列表下的所有字典
- php - 相同的代码仅适用于我使用的 2 台服务器中的 1 台