numpy.insert麻烦

时间:2011-12-15 18:03:52

标签: python insert numpy

我正在尝试在某些索引处插入nan s。

import numpy
z = numpy.array([1., 1., 0., 0., 0., 2., 3., 4., 5., 6., 0., 7., 8., 9.])
a = z[z!=0]
# Some processing magic happens to a but stays the same shape
b = numpy.argwhere(z == 0).flatten()
c = numpy.insert(a, b, numpy.nan)

我希望结果是:

[1, 1, nan, nan, nan, 2, 3, 4, 5, 6, nan, 7, 8, 9]

但我得到了:

[1, 1, nan, 2, nan, 3, nan, 4, 5, 6, 7, 8, 9, nan]

有没有办法用numpy.insert或其他内置命令实现这一点,如果没有,什么是一个很好的干净解决方法?索引列表将始终为升序,从不具有重复项,但可能存在类似示例的空白。

编辑对不起我编辑问题时的困惑。

1 个答案:

答案 0 :(得分:4)

以下将会这样做:

numpy.insert(a, b-numpy.arange(len(b)), numpy.nan)

以下是与您的示例完整的ipython会话:

In [87]: import numpy

In [88]: z = numpy.array([1., 1., 0., 0., 0., 2., 3., 4., 5., 6., 0., 7., 8., 9.])

In [89]: a = z[z!=0]

In [90]: b = numpy.argwhere(z == 0).flatten()

In [91]: c = numpy.insert(a, b, numpy.nan)

In [92]: numpy.insert(a, b - numpy.arange(len(b)), numpy.nan)
Out[92]: 
array([  1.,   1.,  NaN,  NaN,  NaN,   2.,   3.,   4.,   5.,   6.,  NaN,
         7.,   8.,   9.])

正如您所看到的,NaNs恰好出现在z中零的位置。