Numpy: Как итеративно складывать трехмерные массивы в строки? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь сложить в строки (ось = 0) результаты вычислений, которые приводят к созданию трехмерных массивов. Я не знаю результатов раньше времени.

import numpy as np

h = 10
w = 20
c = 30
result_4d = np.???   # empty

for i in range(5):
   result_3d = np.zeros((h, w, c))  #fake calculation
   result_4d = np.???  # stacked result_3ds on axis=0

return result_4d

Я пробовал различные перестановки вызовов numpy * stack, но я неизбежно сталкиваюсь с ошибками несоответствия форм.

1 Ответ

0 голосов
/ 07 ноября 2018

Сначала поместите его в список, а затем сложите.

h = 10
w = 20
c = 30
l = []
for i in range(5):
    result_3d = np.zeros((h, w, c))  #fake calculation
    l.append(result_3d)
res = np.stack(l, axis=-1)

res.shape # (10, 20, 30, 5)

# move stacked axis around ...
np.transpose(res, (3,0,1,2)).shape # (5, 10, 20, 30) 

Если вы хотите обновить в цикле, вы можете сделать это:

res = ''
for i in range(5):
    result_3d = np.zeros((h, w, c))  #fake calculation
    if type(res) is str:
        res = np.array([result_3d]) # add dimension
        continue
    res = np.vstack((res, np.array([result_3d]))) # stack on that dimension

res.shape # (5, 10, 20, 30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...