J'ai deux matrices, X
de taille 800E3x45
et W
de taille 45x35
. Comment puis-je créer une matrice de taille 800E3x35
où chaque entrée est le produit scalaire d'une ligne de X
et de la colonne W
?MATLAB: Matrice de produits scalaires
-3
A
Répondre
1
Peut-être que ce n'est pas meilleure façon pour le code de lecture et la compréhension, mais vous pouvez le faire en vue vectorisé à l'aide de la prochaine formule:
res = cell2mat( arrayfun(@(y) arrayfun(@(x) dot(X(y,:), W(:,x)), 1:size(W,2)), ...
(1:size(X,1))', 'UniformOutput', false))
Explication:
- Nous devons prendre
dot(X(y,:), W(:x))
- pour chaque ligne de X (y signifie numéro de ligne) on prend un point pour toutes les colonnes de W (x est la colonne de W) - Utilisez
arrayfun
(intérieur) pour obtenir chaque colonne de W - utilisation
arrayfun
(extern) pour obtenir chaque ligne de X. - Nous obtenons résultat en réseau de cellules, donc permet de le convertir à la matrice numérique - utilisez `cell2mat »
post-scriptum Je pense qu'il est possible de trouver une solution plus élégante, en utilisant bsxfun
mais c'est la première fois que je peux l'imaginer.
essayez avec 'M = X * W' – eyllanesc
Pourquoi toutes vos questions sont-elles identiques? –