NumPy - вставить массив нулей после указанных индексов - PullRequest
0 голосов
/ 08 ноября 2018

Мой код:

x=np.linspace(1,5,5)

a=np.insert(x,np.arange(1,5,1),np.zeros(3))

Требуемый вывод:

[1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5]

Я получаю ошибку:

ValueError: несоответствие формы: массив значений формы (3,) не может быть передан для индексации результата формы (4,)

Когда я делаю:

x=np.linspace(1,5,5)

a=np.insert(x,np.arange(1,5,1),0)

Выход:

array([1., 0., 2., 0., 3., 0., 4., 0., 5.])

Почему это не работает, когда я пытаюсь вставить массив?

PS II не может использовать циклы

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Другой вариант:

np.hstack((x[:,None], np.zeros((5,3)))).flatten()[:-3]

дает:

array([ 1.,  0.,  0.,  0.,  2.,  0.,  0.,  0.,  3.,  0.,  0.,  0.,  4.,
    0.,  0.,  0.,  5.])

То есть притворимся x - это вектор-столбец, сложив блок нулей 5x3 справа от него и затем сгладив его.

0 голосов
/ 08 ноября 2018

Вы можете использовать np.repeat для подачи повторяющихся индексов. Для массива 1d аргумент obj для np.insert ссылается на отдельные индексы.

x = np.linspace(1, 5, 5)

a = np.insert(x, np.repeat(np.arange(1, 5, 1), 3), 0)

array([ 1.,  0.,  0.,  0.,  2.,  0.,  0.,  0.,  3.,  0.,  0.,  0.,  4.,
        0.,  0.,  0.,  5.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...