Следующая строка:
np.matrix(T+P).T*np.matrix(T+P)
в основном сначала выполняет поэлементное сложение (T+P
), а затем результат транспонируется с использованием .T
.Это (матрица) умножается на матрицу, полученную из (np.matrix(T+P)
)
Ниже приведен пример с игрушкой:
In [14]: m
Out[14]:
matrix([[1, 2, 3, 4],
[2, 3, 4, 5]])
In [15]: n
Out[15]:
matrix([[10, 20, 30, 40],
[11, 21, 31, 41]])
In [16]: m.T * n
Out[16]:
matrix([[ 32, 62, 92, 122],
[ 53, 103, 153, 203],
[ 74, 144, 214, 284],
[ 95, 185, 275, 365]])
Обратите внимание, что транспонирование m (то есть m.T
) - это должен , чтобы умножение матрицы (*
) работало.
Как видно из приведенного выше примера, размерность результирующей матрицы получается изразмерность столбцов, поскольку размеры в строках сокращаются (4x2, 2x4
=> 4x4
) Таким образом, поскольку ваши матрицы очень велики (3x414024
), потребление памяти также огромно.
ПослеОперация сложения (T+P
), размеры результирующей матрицы одинаковы (3x414024
).И при переносе это становится (414024x3
).Это, в свою очередь, умножение матрицы на другую (3x414024
) матрицу дает в результате матрицу размерности (414024x414024
), которая определенно является огромной матрицей.