Как получить доступ к конкретным записям в подмассиве структурированного массива - PullRequest
0 голосов
/ 27 февраля 2019

Используя приведенный пример здесь :

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 в массиве 'grades'?

Из-задвусмысленность того, как я могу получить доступ к оценкам конкретного человека, то есть потому, что я могу написать

>>> 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'][:]

На той же ноте: почему форма «оценок»'field, объявленное как' (2,) ', в то время как' (2) ',' [2,] ',' [2] 'и' 2 ', похоже, дают одинаковые результаты?

1 Ответ

0 голосов
/ 27 февраля 2019

Для каждого человека будет напечатан первый класс из grades:

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

В качестве альтернативы:

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

Вывод:

[8. 6.]

Объяснение:

  1. x[:]['grades'] (или x['grades']) создает массив 2d.На самом деле, он создает массив 1d значений grade, но тогда каждое значение grade само является массивом 1d.Чистый результат, массив 2d:

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

  2. Из этого массива 2d мы хотим получить только первый класс из каждого класса для всех классов, поэтому мызатем используйте индексирование [:,0]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...