Как смерджить 2 numpy array разных размеров, начиная с последней строки меньшего массива?
У меня есть 2 np.array
Первый:
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]
Второй:
[[1 1 2]
[3 4 5]
[6 7 8]]
Я хочу получить 2 массива, которые будут заполнятся с конца. При чем, сначала мы берем все элементы с меньшего массива, а потом дополняем финальным массив недостающими элементами с большего массива. Вот примеры массивов:
[[0., 0., 0.],
[1., 1., 2.],
[3., 4., 5.],
[6., 7., 8.]]
Второй массив:
[[0., 0., 0.],
[6., 7., 8.],
[3., 4., 5.],
[1., 1., 2.]]
Как мне смержить 2 массива таким образом, чтобы результат наполнялся с конца?
При чем, в первом случае, как видите, последней строкой финального массива есть последняя строка меньшего массива, а во втором - первая строка меньшего массива
Спасибо
Ответы (1 шт):
При исходных:
import numpy as np
arr1 = np.array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
arr2 = np.array([[1, 1, 2],
[3, 4, 5],
[6, 7, 8]])
более-менее универсальное решение:
res = np.pad(arr2, ((arr1.shape[0]-arr2.shape[0], 0), (0, arr1.shape[1]-arr2.shape[1])))
res:
[[0 0 0]
[1 1 2]
[3 4 5]
[6 7 8]]
ну и
res1 = np.pad(np.flipud(arr2), ((arr1.shape[0]-arr2.shape[0], 0), (0, arr1.shape[1]-arr2.shape[1])))
res1:
[[0 0 0]
[6 7 8]
[3 4 5]
[1 1 2]]
Если же вы знаете, что в итоговом массиве должна быть всего лишь первая строка из нулей, то делается ещё проще:
res2 = np.concatenate(([[0,0,0]], arr2))
array([[0, 0, 0],
[1, 1, 2],
[3, 4, 5],
[6, 7, 8]])
res2 = np.concatenate(([[0,0,0]], np.flipud(arr2)))
array([[0, 0, 0],
[6, 7, 8],
[3, 4, 5],
[1, 1, 2]])