如何访问结构化数组的子数组中的特定条目

How to access specific entries in sub-array of a structured array

使用给定的示例 here:

dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])
x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)

如何才能只访问 'grades' 数组中位置 0 的成绩?

由于我无法访问特定人员的成绩,即因为我可以写

>>> x['grades'][0]
>>> [8.0 7.0]

>>> x[0]['grades']
>>> [8.0 7.0]

两者都会给出相同的结果,我看不出有什么方法可以只访问位置 0 的成绩,但可以访问所有人。有办法吗?

我不会写

>>> x[0]['grades'][0]
>>> 8.0

或像这样的组合

>>> x[:]['grades'][0]
>>> x[0]['grades'][:]

同上:为什么'grades'字段的形状声明为'(2,)',而'(2)'、'[2,]'、'[2]'和“2”似乎都给出相同的结果?

这将为每个人打印 grades:

的一年级
print (x[:]['grades'][:,0])

或者:

print(x['grades'][:,0])

输出:

[8. 6.]

解释:

  1. x[:]['grades'](或x['grades'])生成一个二维数组。实际上,它生成了 grade 值的一维数组,但是 grade 的每个值本身都是一维数组。最终结果,一个二维数组:

    [[8. 7.] [6. 7.]]

  2. 从这个二维数组中,我们只想获得所有年级的每个年级的第一年级,所以我们然后使用索引 [:,0]