Как добавить новый столбец, строку и форму для 3D-массива в numpy?

#numpy #numpy-ndarray

Вопрос:

На выходе a = np.zeros((2,2,2,3),int) получается

 [[[[0 0 0]
   [0 0 0]]

  [[0 0 0]
   [0 0 0]]]

 [[[0 0 0]
   [0 0 0]]

  [[0 0 0]
   [0 0 0]]]]
 

У меня есть список Y = [a,b], и я хочу добавить их, например, в новую строку, столбец и фигуру, чтобы новая фигура была (2,3,3,4)

Результат был бы таким:

 [[[[0 0 0 a]
   [0 0 0 a]
   [a a a a]]

  [[0 0 0 a]
   [0 0 0 a]
   [a a a a]]

  [[a a a a]
   [a a a a]
   [a a a a]]]


 [[[0 0 0 b]
   [0 0 0 b]
   [b b b b]

  [[0 0 0 b]
   [0 0 0 b]
   [b b b b]

  [[b b b b]
   [b b b b]
   [b b b b]]]
 

Уже почти 2 дня я пытаюсь решить эту проблему, но мне это не удалось.

Комментарии:

1. Обычно мы предпочитаем видеть некоторые из этих попыток, даже если они приводят к ошибкам или неправильным результатам. Нам нужно знать кое-что о том, что вы понимаете. Есть несколько способов сделать это. concatenating массивы-это одно, заполнение «пустого» массива-другое. Вы пробовали что-то более простое, например, добавление столбца в 2d-массив?

2. Я попытался объединить, и я могу добавить новый столбец или строку, но не последнюю матрицу, которая включает тот же элемент, что и a или b. Я понял, что вы сделали, и я не думал, что это будет так просто с новой матрицей, как вы сделали с Y. Огромное спасибо

Ответ №1:

Создайте начальный массив и цель:

 In [14]: a = np.ones((2,2,2,3),int)
In [15]: Y = np.zeros((2,3,3,4),int)
 

Заполнение задней площадки:

 In [21]: Y[0,:,:,:]=2
In [22]: Y[1,:,:,:]=3
 

и тогда a :

 In [23]: Y[:,:2,:2,:3]=a
 

результат:

 In [24]: Y
Out[24]: 
array([[[[1, 1, 1, 2],
         [1, 1, 1, 2],
         [2, 2, 2, 2]],

        [[1, 1, 1, 2],
         [1, 1, 1, 2],
         [2, 2, 2, 2]],

        [[2, 2, 2, 2],
         [2, 2, 2, 2],
         [2, 2, 2, 2]]],


       [[[1, 1, 1, 3],
         [1, 1, 1, 3],
         [3, 3, 3, 3]],

        [[1, 1, 1, 3],
         [1, 1, 1, 3],
         [3, 3, 3, 3]],

        [[3, 3, 3, 3],
         [3, 3, 3, 3],
         [3, 3, 3, 3]]]])