Укладка ndarrays в al oop с использованием np.stack в новом измерении (создание массива ndarrays) - PullRequest
1 голос
/ 05 мая 2020

Я не могу складывать numpy массивы в новое измерение из-за следующей проблемы:

>>> a = np.zeros(shape=(100,100))
>>> b = np.zeros(shape=(100,100))
>>> c = np.stack((a, b))
>>> c.shape
(2, 100, 100)
>>> d = np.zeros(shape=(100,100))
>>> c = np.stack((c, d))
Traceback (most recent call last):
  File "/lib/python3.7/site-packages/numpy/core/shape_base.py", line 426, in stack
    raise ValueError('all input arrays must have the same shape')
ValueError: all input arrays must have the same shape

Я собираюсь использовать его в al oop следующим образом:

final = None
for next_mat in mats:
    final = next_mat if final is None else np.stack((final, next_mat))

Как мне этого добиться? Спасибо!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Поскольку стек ожидает, что все входные данные будут иметь одинаковую форму, если вы хотите складывать в стек во время каждого l oop, вы можете вместо этого использовать vstack. Вам также необходимо расширить размеры до (1,100,100) из (100,100).

final = None
for next_mat in mats:
    next_mat = np.expand_dims(next_mat, 0)
    final = next_mat if final is None else np.vstack((final, next_mat))
1 голос
/ 05 мая 2020

Я бы предпочел хранить все массивы и стек один раз:

cum_arr = []
for next_mat in mats:
    cum_arr.append(next_mat)

np.stack(cum_arr)

Или, если у вас есть список mats:

np.stack(mats)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...