我知道迭代numpy数组比使用numpy函数更昂贵。这对我来说很重要,因为我的数组非常大。
请使用提供的代码作为解释我想实现什么
start_value = 12
start_arr = np.array([-2, -4, -60, -0.5, 2, 2, 1, 70, -2, -5, 2])
out_arr = []
ans = start_value
for i in start_arr:
if i > 0:
out_arr.append(i)
ans = i
else:
out_arr.append(ans)
out_arr = np.array(out_arr)
# [12, 12, 12, 12, 2, 2, 1, 70, 70, 70, 2]
我不知道如何告诉numpy在case i <= 0
中使用“以前”分配的值。而且我无法向浏览器的搜索引擎解释这个问题,因为它会输出一些有用的东西。
3条答案
按热度按时间unguejic1#
使用pandas:
输出:
一个numpy方法(灵感来自this answer):
jm2pwxwz2#
您可以为输出数组中的每个值构建一个源索引数组。源索引是前一个正值的索引。您可以在将负位置的索引归零后使用
numpy.maximum.accumulate
函数计算这些索引。在此之后,可以单独处理前导负项。
u7up0aaq3#
以下是我的解决方案,只使用Numpy(用任何你想要的东西改变12):
'''
import numpy as np
array = np.array([-2,-4,-60,-0.5,2,2,1,70,-2,-5,2])
替换= 12
为真时:
'''