繁体   English   中英

如何在 numpy 结构化数组中选择一行并设置一个值?

[英]How to select a row in a numpy structured array and set a value?

我有一个 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

但它似乎只是提取行并从原始数组中创建一个新数组。 如何实际设置一个值并将其保留在原始数组中?

一般来说,如果你想为现有数组赋值,你需要将值赋值给原始视图,而不是副本。 当您以这种方式使用数组索引时,您总是会得到一个副本,正如您所意识到的。

在记录数组的情况下,您可以通过首先访问该字段来获取视图:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM