проблемы с numpy.insert - PullRequest
       1

проблемы с numpy.insert

2 голосов
/ 15 декабря 2011

Я пытаюсь вставить 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 Ответ

4 голосов
/ 15 декабря 2011

Это будет делать следующее:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...