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

时间:2019-02-27 15:09:21

标签: python numpy 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)

如何仅访问“成绩”数组中位置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'][:]

在同一条注释上:为什么“成绩”字段的形状声明为“(2,)”,而“(2)”,“ [[2,]”,“ [2]”和“ 2”似乎都给出了相同的结果?

1 个答案:

答案 0 :(得分:2)

这将为每个人打印rows: 2 slidesPerRow: 1 的一年级:

grades

或者:

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

输出:

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

说明:

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

    grade

  2. 从这个2d数组中,我们希望仅从每个年级获得所有年级的第一年级,因此我们使用索引[[8. 7.] [6. 7.]]