使用自定义dtype替换数组的numpy数组值

时间:2014-06-11 15:53:01

标签: python arrays numpy

我的数据如下所示:

x = np.array([('joe', [1, 3, 5, 7, 9, 3, 2, 4]),\
              ('sally', [7, 3, 5, 1, 4, 3, 2, 4])],\
              dtype=np.dtype([('name', 'a10'), ('scores', (float, 8))]))

我希望替换'分数中的值。列与np.maximum.accumulate()的结果类似。如果我有一个numpy数组y值:

[1, 3, 5, 7, 9, 3, 2, 4]

我输出如下:

[1 3 5 7 9 9 9 9]

但我似乎无法在具有复杂或自定义数据类型的numpy数组上使用它。我认为这与创建视图和数据副本有关,但我似乎无法弄明白。

我尝试了几种不同的方法:

x['scores'] = np.maximum.accumulate(x['scores'])

for i, score in enumerate(x):
   x[i]['scores'] = np.maximum.accumulate(x[i]['scores'])

但似乎都无法替换现有的值。关于如何实现这一点的任何建议都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

这不是作业,np.maximum.accumulate并没有回复你的想法:

>>> np.maximum.accumulate(x["scores"])
array([[ 1.,  3.,  5.,  7.,  9.,  3.,  2.,  4.],
       [ 7.,  3.,  5.,  7.,  9.,  3.,  2.,  4.]])

如果您指定axis=1,则:

>>> np.maximum.accumulate(x["scores"], axis=1)
array([[ 1.,  3.,  5.,  7.,  9.,  9.,  9.,  9.],
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.]])
>>> x["scores"] = np.maximum.accumulate(x["scores"], axis=1)
>>> x
array([('joe', [1.0, 3.0, 5.0, 7.0, 9.0, 9.0, 9.0, 9.0]),
       ('sally', [7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0])], 
      dtype=[('name', 'S10'), ('scores', '<f8', (8,))])

PS:当您使用命名列时,使用pandas可以让生活比裸numpy更方便,我衷心推荐。