У меня есть X-матрица с формой (ni * 43 * 91) x67 и тензор W с формой 67x43x91. ni меняетсяКак векторизовать это умножение?
Мне нужно получить вектор (ni * 43 * 91) y, усеяв первые ni строки X первым столбцом W, чтобы получить первые ni элементов y и вторых ni строк X с второй столбец W для получения вторых ni элементов y и т. д. и т. д. Когда у меня заканчиваются столбцы в W, я перехожу к следующему измерению и продолжаю.
У меня есть две маски dim2 и dim3, обе формы (ni * 43 * 91), в порядке. Сейчас это то, что я делаю (упрощенно), и это очень медленно
for d3 in range(91):
for d2 in range(43):
mask = ((dim3 == d3) & (dim2 == d2))
curr_X = X[mask, :]
curr_W = W[:,d2,d3]
curr_y = numpy.dot(curr_X,curr_W)
y[mask] = curr_y
Возможно ли это без петель для?
Не уверен, что это сработает, но вы просмотрели http://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html или http://docs.scipy.org/doc/numpy /reference/generated/numpy.tensordot.html#numpy.tensordot – JoshAdel