NumPy数组中的命名字段

2024-10-05 15:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有兴趣创建一个2dnumpy数组,其中每一行都可以通过一个惟一的字段名来引用。我曾尝试过这样的记录数组:

>>> a = np.recarray((2, 10), dtype=[('x', 'f8'), ('y', 'f8')])

但当我这样做简单的算术时,这就失败了:

^{pr2}$

有没有一种方法可以使用命名字段,不需要为每个字段设置不同的数据类型,或者在我尝试进行数组运算时不会失败?在


Tags: 方法np记录算术数组名字字段名兴趣
3条回答

recarraystructured数组不是为方便的命名列而设计的。它们是用来保存混合数据类型的,这是一种可以从CSV文件加载的东西——字符串、整数、浮点、日期。在

可以跨字段执行的操作是有限的。正如您所发现的,您不能向整个数组添加值。如果字段类型正确,则必须逐个字段添加它。类似地,您不能求和这两个字段,或取它们的平均值(使用np.sumnp.mean函数)。也不能重塑或转置这些数组(将字段交换为行等)。在

Constructing np.array with overlapping fields in dtype是一个当前的SO问题,它说明了以2列数组的形式访问两个字段的几种方法。在

最好使用普通的nd阵列,除非您真的需要增加结构化阵列的灵活性。如果要按名称访问列,请考虑定义变量,例如ind_x=0ind_y=1,这样就可以使用a[2:5, ind_x]。在

重新排列允许访问像对象属性这样的字段。所以这是有效的。在

a.x += 4
a.y += 5

np.recarray((2, 10), dtype=[('x', 'f8'), ('y', 'f8')])返回大小为2x10的矩阵,其中每个元素是两个元素的元组。因此,操作a+4.0根本没有意义。在

独立于每个字段的重新排列:

a[0,0].x += 4.0

相关问题 更多 >