Calculate only diagonal elements of multidimensional array product
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Michael Werther
il 28 Nov 2019
Commentato: Michael Werther
il 13 Dic 2019
Hi everybody,
I have two arrays and , where M is small and N is large. What would be the fastest way to calculate for all l? I could do
sum(repmat(A.',[1,1,N]).*B,1), but since N is large this doesn't seem the best idea to me. Any help is appreciated.
Thanks
3 Commenti
David Goodmanson
il 2 Dic 2019
Hi Michael, your question was pretty clear since it's only a single sum instead of a double one, so my comment is toast.
Risposta accettata
Matt J
il 2 Dic 2019
Modificato: Matt J
il 2 Dic 2019
Assuming your Matlab version is post-R2016b
reuslt = sum(B.*A.',1)
Otherwise, assuming your Matlab version is post-R2008
result = sum(bsxfun(@times, B,A.'),1)
And even if your Matlab version is really, really, really old, then there is still as a last resort,
At=A.';
C=diag(At(:))*reshape(B,[],N));
result=sum(reshape(C,M,M,N),1)
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!