NumPy - вставляет массив нулей после указанных индексов

Мой код:

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: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (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.])

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

P.S. Я не могу использовать петли

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
0
410
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать 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.])
Ответ принят как подходящий

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

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 справа от него, а затем сгладьте.

Другие вопросы по теме