<p>您可以使用<a href="https://docs.python.org/2/library/itertools.html" rel="nofollow noreferrer">itertools</a>包的<a href="https://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">groupby</a></p>
<pre><code>import numpy as np
from itertools import groupby
l = np.array([0, 1, 0, 0, -6, 13, 0, 0, 0, 1, 16, 0, 0, 0, 0])
def _ret_list( k, it ):
# number of elements in iterator, i.e., length of list of similar items
l = sum( 1 for i in it )
if k==0 and l>2:
# sublist has more than two zeros. replace each zero by np.nan
return [ np.nan ]*l
else:
# return sublist of simliar items
return [ k ]*l
# group items and apply _ret_list on each group
procesed_l = [_ret_list(k,g) for k,g in groupby(l)]
# flatten the list and convert to a numpy array
procesed_l = np.array( [ item for l in procesed_l for item in l ] )
print procesed_l
</code></pre>
<p>这给了你</p>
<pre><code>[ 0. 1. 0. 0. -6. 13. nan nan nan 1. 16. nan nan nan nan]
</code></pre>
<p>请注意,每个<code>int</code>都转换为<code>float</code>。请看这里:<a href="https://stackoverflow.com/questions/11548005/numpy-or-pandas-keeping-array-type-as-integer-while-having-a-nan-value">NumPy or Pandas: Keeping array type as integer while having a NaN value</a></p>