从第一个非零元素开始切片数组

时间:2016-11-02 15:02:41

标签: python arrays numpy

我有一个带前导零的数组,我想要第一个非零元素的数组。 例如,我有一个数组

x=[0,0,0,0,0,3,2,0,0,4,5]

我想获得:

 x=[3,2,0,0,4,5]

2 个答案:

答案 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])