У меня есть 2 матрицы, и я хочу выполнить сложение по ячейкам, однако матрицы имеют разный размер.Я хочу сохранить относительные позиции ячеек во время вычисления (т.е. их «координаты» слева вверху), поэтому простое (если не самое лучшее) решение, кажется, заключается в том, чтобы заполнить меньшиеx и y матрицы с нулями.
Этот поток имеет вполне удовлетворительный ответ для конкатенации по вертикали, и это работает с моими данными, и, следуя предложению в ответе, я также добавилhstack
, но на данный момент жалуется, что размеры (исключая ось конкатенации) должны точно совпадать.Возможно, hstack не работает так, как я ожидаю, или точно так же, как vstack, но сейчас я немного растерялся.
Это то, что hstack
бросает в меня, в то время как vstack
, похоже, не имеет проблем.
ValueError: all the input array dimensions except for the concatenation axis must match exactly
По сути, код проверяет, какая из пары матриц короче и / или шире, а затем дополняет меньшую матрицу нулями для соответствия.
Вот код, который у меня есть:
import numpy as np
A = np.random.randint(2, size = (3, 7))
B = np.random.randint(2, size = (5, 10))
# If the arrays have different row numbers:
if A.shape[0] < B.shape[0]: # Is A shorter than B?
A = np.vstack((A, np.zeros((B.shape[0] - A.shape[0], A.shape[1]))))
elif A.shape[0] > B.shape[0]: # or is A longer than B?
B = np.vstack((B, np.zeros((A.shape[0] - B.shape[0], B.shape[1]))))
# If they have different column numbers
if A.shape[1] < B.shape[1]: # Is A narrower than B?
A = np.hstack((A, np.zeros((B.shape[1] - A.shape[1], A.shape[0]))))
elif A.shape[1] > B.shape[1]: # or is A wider than B?
B = np.hstack((B, np.zeros((A.shape[1] - B.shape[1], B.shape[0]))))
Становится поздно, так что возможно, я просто упустил что-то очевидное с hstack
, но в данный момент я не вижу своей логической ошибки.