Проблема:
У меня есть два набора данных, 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Есть хороший способ эффективно векторизовать это?