我的数据如下所示:
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'])
但似乎都无法替换现有的值。关于如何实现这一点的任何建议都将非常感激。谢谢!
答案 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
更方便,我衷心推荐。