Чередовать массивы

Я пытаюсь чередовать массивы, как показано ниже.

import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([4,6,2,6,9],[5,9,8,7,4],[3,2,5,4,9])

Желаемый результат:

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

Есть ли элегантный способ сделать это?


Это мой способ, которым я написал, но я хотел улучшить эту линию. data=np.array([x,y[0],x,y[1],x,y[2]]) Любой другой способ написать это?

x=np.array([1,2,3,4,5])     
y=np.array([[4,6,2,6,9],[5,9,8,7,4],[3,2,5,4,9]]) 

data=np.array([x,y[0],x,y[1],x,y[2]])
print(data)

2 ответа

Решение

Вы можете попробовать использовать np.insert

import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([[4,6,2,6,9],[5,9,8,7,4],[3,2,5,4,9]])
np.insert(y, obj=(0, 1, 2), values=x, axis=0)

array([[1, 2, 3, 4, 5],
       [4, 6, 2, 6, 9],
       [1, 2, 3, 4, 5],
       [5, 9, 8, 7, 4],
       [1, 2, 3, 4, 5],
       [3, 2, 5, 4, 9]])

(0, 1, 2) относится к индексам в y что вы хотели бы вставить до вставки.

РЕДАКТИРОВАТЬ: можно использовать obj=range(y.shape[0]) для произвольной длины y, Спасибо за предложение Чила.

Пожалуйста, смотрите tutorial для дополнительной информации.

Адаптировано из ответа /questions/6630594/perepletenie-dvuh-massivov/6630597#6630597 для переплетения двух массивов:

import numpy as np
x=np.array([1,2,3,4,5])     
y=np.array([[4,6,2,6,9],[5,9,8,7,4],[3,2,5,4,9]]) # fixed missing []

x_enh = np.array([x]*len(y)) # blow up x to y size 

c = np.empty((y.size * 2,), dtype=y.dtype).reshape(y.size,5) # create correctly sized empty
c[0::2] = x_enh   # interleave using 2 steps starting on 0
c[1::2] = y       # interleave using 2 steps starting on 1

print(c)

Выход:

[[1 2 3 4 5]
 [4 6 2 6 9]
 [1 2 3 4 5]
 [5 9 8 7 4]
 [1 2 3 4 5]
 [3 2 5 4 9]]
Другие вопросы по тегам