J'ai une matrice X de forme (ni*43*91)x67 et un tenseur W de forme 67x43x91. ni varie
J'ai besoin d'obtenir un vecteur (ni*43*91) y en faisant le point entre les ni premières lignes de X et la première colonne de W pour obtenir les ni premiers éléments de y et les ni deuxièmes lignes de X avec la deuxième colonne de W pour obtenir les ni deuxièmes éléments de y, et ainsi de suite. Lorsque je n'ai plus de colonnes dans W, je passe à la dimension suivante et je continue.
J'ai deux masques dim2 et dim3, tous deux de forme (ni*43*91), dans l'ordre. Pour l'instant c'est ce que je fais (simplifié) et c'est très lent
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
Est-il possible de le faire sans les boucles "for" ?