Numpy векторизованная комбинация гадамара и точечного произведения - PullRequest
0 голосов
/ 23 октября 2019

Проблема:

У меня есть два набора данных, A и B, форм kxnxm и kxmxp соответственно, с k , m и p потенциально очень большие, и поэтому я действительно хотел бы векторизовать любые процессы на них.

Я хотел бы сформировать скалярное произведение междуэти два набора данных таковы, что каждый элемент kth в A усеян каждым элементом kth в B (чтобы сформировать матрицу kxnxp , пунктирную по оси m). На первый взгляд, это выглядело как комбинация продукта hadamard и точечного продукта (отсюда и название), но я не могу найти способ получить желаемый результат.

Для справки, потому что я могучтобы векторизация работала хорошо, в настоящее время я запускаю ее так:

        for b, w in zip(biasList, weightsList):
            z = np.asarray([np.dot(weightMatrix,activation) for weightMatrix, activation in zip(w,activation)])

Что явно не векторизовано, поэтому имеет ужасную производительность.

Использование либо numpy dot, либоnumpy einsum (как показано здесь: векторизованное / транслируемое произведение точек numy массивов с различными размерами ) не дает мне желаемых результатов, так как кажется, что они приносят только матрицы форм kxnxm и kxmxp , суммируя по паре индексов, получая матрицу размера kxnxkxp , или по обоим индексам, получая nxp .

IsЕсть хороший способ эффективно векторизовать это?

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