Как выбрать строку в numpy структурированном массиве и установить значение? - PullRequest
1 голос
/ 27 марта 2020

У меня есть структурированный массив numpy, который выглядит следующим образом:

>>> arr
array([('2020-03-26T21:30',    0, 0.),
    ('2020-03-26T21:31',    1, 0.),
    ('2020-03-26T21:32',    2, 0.), ...,
    ('2020-03-27T22:27', 1497, 0.),
    ('2020-03-27T22:28', 1498, 0.),
    ('2020-03-27T22:29', 1499, 0.)],
    dtype=[('time', '<M8[m]'), ('idx', '<i4'), ('value', '<f4')])

Я хочу выбрать определенную строку и установить ее значение в качестве некоторого значения. Как я могу это сделать?

Я пробовал это:

>>> arr[ np.where(arr['time'] == np.datetime64('now', 'm')) ]['value'] = 10

Но, похоже, он просто извлекает строку и создает новый массив из исходного массива. Как я могу на самом деле установить значение и сохранить его в исходном массиве?

1 Ответ

1 голос
/ 27 марта 2020

Как правило, если вы хотите присвоить значения существующему массиву, вам нужно присвоить значение представлению оригинала, а не копии. Когда вы используете индексирование массивов таким образом, вы всегда получите копию, как вы уже поняли.

В случае массивов записей вы можете получить представление, открыв поле first :

>>> arr['value'][numpy.where(arr['time'] == b'2020-03-26T21:31')] = 100
>>> arr
array([(b'2020-03-26T21:30',    0,   0.),
       (b'2020-03-26T21:31',    1, 100.),
       (b'2020-03-26T21:32',    2,   0.),
       (b'2020-03-27T22:27', 1497,   0.),
       (b'2020-03-27T22:28', 1498,   0.),
       (b'2020-03-27T22:29', 1499,   0.)],
      dtype=[('time', 'S20'), ('idx', '<i4'), ('value', '<f4')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...