Чередовать массивы
Я пытаюсь чередовать массивы, как показано ниже.
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]]