我正在尝试在某些索引处插入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
或其他内置命令实现这一点,如果没有,什么是一个很好的干净解决方法?索引列表将始终为升序,从不具有重复项,但可能存在类似示例的空白。
编辑对不起我编辑问题时的困惑。
答案 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
中零的位置。