Заполнение с использованием Numpy в Python - PullRequest
0 голосов
/ 25 января 2020

Занимает один 3-мерный массив. Дополните экземпляры из конечной позиции, как показано в примере ниже. То есть мне нужно добавить отражение высказывания, отраженного вдоль значений ребер массива.

Массив a:

array ([array([[3, 1, 4, 1],
   [5, 9, 2, 6],
   [5, 3, 5, 8]]),
   array([[9, 7, 9, 3],
   [2, 3, 8, 4]]),
   array([[6, 2, 6, 4],
   [3, 3, 8, 3],
   [2, 7, 9, 5],
   [0, 2, 8, 8]])], dtype=object)

dim1 = a.shape[0]    # n
dim2 = max([i.shape[0] for i in a]) # m
dim3 = a[0].shape[1] # k

Размер конечной матрицы после заполнения:

result = np.zeros ((dim1, dim2, dim3))

Вывод:

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

      [[6. 2. 6. 4.]
       [3. 3. 8. 3.]
       [2. 7. 9. 5.]
       [0. 2. 8. 8.]]]

как я могу получить вывод, используя numpy .pad?

1 Ответ

1 голос
/ 26 января 2020

Хитрость заключается в том, чтобы использовать параметр pad_width с указанием c количества строк, добавляемых в каждом измерении. В этом случае pad_width должно иметь форму (2,2).

for b in a:
    extra_lines = dim2 - b.shape[0]
    c = np.pad(b, pad_width=[[0, extra_lines], [0, 0]], mode='symmetric')
    print(c, '\n')

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

[[9 7 9 3]
 [2 3 8 4]
 [2 3 8 4]
 [9 7 9 3]] 

[[6 2 6 4]
 [3 3 8 3]
 [2 7 9 5]
 [0 2 8 8]] 
...