我有一个带前导零的数组,我想要第一个非零元素的数组。 例如,我有一个数组
x=[0,0,0,0,0,3,2,0,0,4,5]
我想获得:
x=[3,2,0,0,4,5]
答案 0 :(得分:6)
你拥有的是一个列表,而不是一个数组。这是一个纯Python解决方案,但您可以考虑将列表转换为NumPy阵列并使用Divakar的解决方案以获得更好的性能(当且仅当您计划使用NumPy进行下游处理时)
In [1]: from itertools import dropwhile
In [2]: from operator import not_
In [3]: x = [0,0,0,0,0,3,2,0,0,4,5]
In [4]: list(dropwhile(not_, x))
Out[4]: [3, 2, 0, 0, 4, 5]
答案 1 :(得分:1)
在non-zeros
上使用np.argmax
获取起始非零索引,然后将其切片 -
x[(x!=0).argmax():]
示例运行 -
In [71]: x
Out[71]: array([0, 0, 0, 0, 0, 3, 2, 0, 0, 4, 5])
In [72]: x[(x!=0).argmax():]
Out[72]: array([3, 2, 0, 0, 4, 5])