我尝试使用numpy内置函数优化这段代码:
result = [test[0]]
for x in range(1, len(test)):
if test[x] <= result[-1]:
result.append(result[-1]+1)
else:
result.append(test[x])
print(result)
字符串
上面的代码循环遍历数组,检查前一个值是否等于或上级当前值,如果是,则加+1。否则,它什么也不做。
它是递归的(当前值取决于先前计算的值)。
对于test = np.array([0, 0, 0, 1, 4, 15, 16, 16, 16, 17])
,我希望得到[0, 1, 2, 3, 4, 15, 16, 17, 18, 19]
有没有更好的方法呢?我需要多次使用这个方法来处理非常大的数组(>=10M长度)。
3条答案
按热度按时间zi8p0yeb1#
我已经测试了不同的方法以下Onyambu评论:
字符串
结果如下:
在这种情况下,更简单更好。
cyvaqqii2#
怎麽样?
字符串
这样可以确保,如果输入数组中的相应元素不大于前一个元素,则结果数组中的每个元素都严格大于前一个元素。
输出量:
型
yvt65v4c3#
一些更快的解决方案基于您的原始,使用您的答案的基准:
的数据
第一个在开始时只添加了
test = test.tolist()
。因为Python在自己的int上比在NumPy int上工作得更快。另外两个避免了索引并使用了列表解析。字符串