#python #arrays
#python #массивы
Вопрос:
У меня есть 3D-матрица:
array = np.array([[[1,2,3,4,5],[4,5,6,1,3], [7,8,9,6,7],[1,2,3,5,5],[4,5,6,8,9], [7,8,9,4,7]],[[1,2,3,4,5],[4,5,6,1,3], [7,8,9,6,7],[1,2,3,5,5],[4,5,6,8,9], [7,8,9,4,7]]])
Это приводит к матрице в виде:
array([[[1, 2, 3, 4, 5],
[4, 5, 6, 1, 3],
[7, 8, 9, 6, 7],
[1, 2, 3, 5, 5],
[4, 5, 6, 8, 9],
[7, 8, 9, 4, 7]],
[[1, 2, 3, 4, 5],
[4, 5, 6, 1, 3],
[7, 8, 9, 6, 7],
[1, 2, 3, 5, 5],
[4, 5, 6, 8, 9],
[7, 8, 9, 4, 7]]])
Теперь я хочу добавить нулевой вектор или матрицу, созданные с помощью
x = np.zeros((1,5))
с матричным массивом таким образом, что результат становится:
array([[[1, 2, 3, 4, 5],
[4, 5, 6, 1, 3],
[7, 8, 9, 6, 7],
[1, 2, 3, 5, 5],
[4, 5, 6, 8, 9],
[7, 8, 9, 4, 7],
[0, 0, 0, 0, 0]],
[[1, 2, 3, 4, 5],
[4, 5, 6, 1, 3],
[7, 8, 9, 6, 7],
[1, 2, 3, 5, 5],
[4, 5, 6, 8, 9],
[7, 8, 9, 4, 7],
[0, 0, 0, 0, 0]]])
Кто-нибудь может помочь? Я пробовал использовать конкатенацию и стеки, включая dstack, но они не сработали (или я не смог правильно реализовать).
Я пытался
a = np.vstack((array[0], x))
b = np.vstack((array[1], x))
затем я попытался объединить их в качестве 3D-массива, используя dstack как:
np.dstack((a, b))
это не сработало.
Прямая конкатенация (np.concatenate(array, x)), конечно, не может работать. Вот почему я попытался создать 3D-массив нулей, но, возможно, np.zeros создают только 2D-массивы (или 1D, если одно измерение равно 1).
Комментарии:
1. Пожалуйста, напишите, что вы пробовали, и каким образом это «не сработало».
2. @ScottHunter я только что это сделал
Ответ №1:
Допустим arr
, это ваш (2, 6, 5)
фигурный массив.
Сначала создайте массив нулей подходящей формы:
zeros = np.zeros((2, 1, 5))
Этот массив содержит строку нулей из 5 элементов для каждой «страницы» вашего трехмерного массива.
Затем используйте concatenate
(поскольку вы хотите присоединиться вдоль существующей оси):
np.concatenate((arr, zeros), axis=1)
Результат:
array([[[1., 2., 3., 4., 5.],
[4., 5., 6., 1., 3.],
[7., 8., 9., 6., 7.],
[1., 2., 3., 5., 5.],
[4., 5., 6., 8., 9.],
[7., 8., 9., 4., 7.],
[0., 0., 0., 0., 0.]],
[[1., 2., 3., 4., 5.],
[4., 5., 6., 1., 3.],
[7., 8., 9., 6., 7.],
[1., 2., 3., 5., 5.],
[4., 5., 6., 8., 9.],
[7., 8., 9., 4., 7.],
[0., 0., 0., 0., 0.]]])
Ответ №2:
Вы можете использовать np.append
для этого, а затем объединить два 3D-массива, используя np.concatenate
, например
a = np.array([[[1,2,3,4,5],[4,5,6,1,3], [7,8,9,6,7],[1,2,3,5,5],[4,5,6,8,9], [7,8,9,4,7]],[[1,2,3,4,5],[4,5,6,1,3], [7,8,9,6,7],[1,2,3,5,5],[4,5,6,8,9], [7,8,9,4,7]]])
z = np.zeros((1,5), dtype=int)
new = np.append(a[0], z, axis=0)
new1 = np.append(a[1], z, axis=0)
new2 = np.concatenate(([new], [new1]))
print(new2)
Вывод;
[[[1 2 3 4 5]
[4 5 6 1 3]
[7 8 9 6 7]
[1 2 3 5 5]
[4 5 6 8 9]
[7 8 9 4 7]
[0 0 0 0 0]]
[[1 2 3 4 5]
[4 5 6 1 3]
[7 8 9 6 7]
[1 2 3 5 5]
[4 5 6 8 9]
[7 8 9 4 7]
[0 0 0 0 0]]]