Mam tablicę strukturalną numpy, która wygląda następująco:

>>> 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')])

Chcę wybrać określony wiersz i ustawić swoją wartość jako pewną wartość. Jak mogę to zrobić?

Próbowałem tego:

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

Ale wydaje się, że wystarczy wyodrębnić wiersz i tworzy nową tablicę z oryginalnej tablicy. Jak mogę ustawić wartość i zachować go w oryginalnej tablicy?

1
maynull 27 marzec 2020, 13:42

1 odpowiedź

Najlepsza odpowiedź

Ogólnie rzecz biorąc, jeśli chcesz przypisać wartości do istniejącej tablicy, musisz przypisać wartość do widoku oryginału, a nie kopii. Kiedy używasz indeksowania tablicy w ten sposób, zawsze będziesz otrzymywać kopię, jak zdali sobie sprawę.

W przypadku tablic rekordowych można uzyskać widok, uzyskując dostęp do pola pierwsza :

>>> 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')])
1
senderle 27 marzec 2020, 15:03