假设我们有一个1维的numpy数组,里面填充了一些int
值。并且假设其中一些值为0
。
是否有任何方法,利用numpy
数组的功能,将所有0
值填充为最后一个非零值找到的值?
例如:
arr = np.array([1, 0, 0, 2, 0, 4, 6, 8, 0, 0, 0, 0, 2])
fill_zeros_with_last(arr)
print arr
[1 1 1 2 2 4 6 8 8 8 8 8 2]
一种方法是使用以下函数:
def fill_zeros_with_last(arr):
last_val = None # I don't really care about the initial value
for i in range(arr.size):
if arr[i]:
last_val = arr[i]
elif last_val is not None:
arr[i] = last_val
然而,这里使用的是原始的Python
for
循环,而没有利用numpy
和scipy
的强大功能。如果我们知道一定数量的连续零是可能存在的,我们可以使用基于
numpy.roll
的方法。问题在于连续零的数量可能非常大...有什么想法吗?或者我们应该直接使用
Cython
?免责声明:
我曾经在stackoverflow上发现过一个类似或非常相似的问题。但我找不到它了。 :-(
也许我错过了正确的搜索词,对于重复的问题我感到抱歉。也许那只是我的想象...
pandas
,可以查看ffill
方法(或者查看fillna
以获取完整信息)。但是,numpy
没有内置"向前填充"类型的功能。 - Joe Kingtonpandas
... - mgabpandas.groupby()
- 不过既然有很多其他解决方案,为什么要费事呢 :) - jtlz2