2017-09-02 3 views
3

alpha est un vecteur M×1, et R est un grand tableau de taille n×n×M. Dans mon cas, n et M sont environ 3000. Comment puis-je vectoriser la sommation suivante dans MATLAB?Vectorisation de la sommation de la multipication d'un vecteur 1D et d'un tableau 3D

alpha(1)*R(:,:,1) + alpha(2)*R(:,:,2) + ... + alpha(M)*R(:,:,M) 

Une façon que je pensais était de faire alpha la même taille et faire une opération élément par élément et, enfin, faire une sommation dans la 3ème dimension

sum(reshape(kron(alpha, ones(n*n,1)), [n,n,M]).*R,3) 

Quelqu'un pourrait-il bien vouloir me faire savoir s'il est un moyen meilleur et efficace de le faire?

Répondre

2

Vous pouvez utiliser l'expansion singleton, soit avec bsxfun:

result = sum(bsxfun(@times, R, reshape(alpha, 1, 1, [])), 3); 

ou implicit:

result = sum(R.*reshape(alpha, 1, 1, []), 3); 

Vous pouvez également utiliser la multiplication de la matrice:

result = reshape(reshape(R, [], size(R,3))*alpha, size(R,1), size(R,2));