Покомпонентное произведение всех комбинаций столбцов двух матриц

Как следует из названия, я хочу рассчитать покомпонентный продукт всех комбинаций столбцов двух матриц. Я уже нашел решение, используя numpy.einsum и numpy.hstack. Интересно, есть ли решение без hstack.

Пусть a = [a_1, a_2, ..., a_n] будет матрицей d x n, а b = [b_1, b_2, ..., b_m] - матрицей d x m. я хочу рассчитать

[a_1b_1, a_1b_2, ..., a_nb_{n-1}, a_nb_n],

где a_kb_l — произведение по компонентам, т. е. a_kb_l = [a_{1,k}*b{1,l}, ..., a_{d,k}*b{d,l}].T.

Мое решение заключается в следующем. np.hstack(np.einsum('...j,...l -> j...l', a, b))

Могу ли я обойтись без h_stack?


person paul    schedule 30.08.2019    source источник


Ответы (1)


Следующее улучшение заменяет hstack вызовом reshape. Это значительно снижает нагрузку на память, когда d имеет высокое значение.

np.einsum('...j,...l -> ...jl', a, b).reshape(d, -1)

person paul    schedule 03.10.2019