您的代码似乎与您的描述不符。现在的代码将不会改变a = [3,2]
,但将[3,2,1]
转换为[3, 2, 2]
,这似乎有点奇怪,并且设置accum = 0
意味着负数不会表现相同的方式。
[我只注意到你前面的问题之一是有关Matlab的,它开始从1计数Python是零索引,因此第一个元素是a[0]
,所以也许这是意外?]
更常见的版本可以使用np.maximum.accumulate
来计算,例如:
>>> a
array([6, 0, 7, 9, 9, 6, 9, 5, 1, 8])
>>> your_code(a)
array([6, 0, 7, 9, 9, 9, 9, 9, 9, 9])
>>> np.maximum.accumulate(a)
array([6, 6, 7, 9, 9, 9, 9, 9, 9, 9])
如果你真的需要你原来的行为,那么也许你可以在第一个值补丁到零,呼叫np.maximum.accumulate
,然后重新插入a[0]
。无论如何,类似的东西都应该有效。
[更新]
这将传播nan
:
>>> a
array([ 2., 1., nan, 3., 4., 1.])
>>> np.maximum.accumulate(a)
array([ 2., 2., nan, nan, nan, nan])
如果您希望这些被填满,你可以使用fmax
代替:
>>> np.fmax.accumulate(a)
array([ 2., 2., 2., 3., 4., 4.])
或者使用np.nan_to_num()
将nan
值设置为零:
>>> np.maximum.accumulate(np.nan_to_num(a))
array([ 2., 2., 2., 3., 4., 4.])
,然后你可以使用廉价的破解,如果你想恢复nan
值:
>>> np.fmax.accumulate(a) + (a*0)
array([ 2., 2., nan, 3., 4., 4.])
(你也可以看看蒙面阵列,但我不很经常使用它们他们通常是为我的需要矫枉过正。不过,其他人觉得他们真的很有用。)
我很感谢你的具体,但我有点担心你的例子不足以说明问题。你能举几个例子来展示你想要的输入和输出吗? –
请检查帝斯曼的答案。这是我真正想要的。对不起,我的不好解释,并感谢您的兴趣。 –