How to avoid loops for the following matrix manipulcation
Mostra commenti meno recenti
I need to do the following operations on a series of matrix A1,A2,...,A_m\in\reals^{n\times n}, and two vectors c,x\in\reals^{n}.
- H\in\reals^{n\times n} = \sum_{i=1}{m}(A_i*x)(A_i*x)^T,
- b\in\reals^{n} = \sum_{i=1}{m}c_i*(A_i*x).
I guess no-loop implementation will be faster. However, I tried and failed. Any ideas, guys?
Appreciate your time in advance!
8 Commenti
Chuangchuang Sun
il 25 Gen 2018
James Tursa
il 25 Gen 2018
Are you sure the calculation isn't (A_i*x)^T * (A_i*x) ?
"I need to do the following operations on a series of matrix A1,A2,...,A_m..."
"I guess no-loop implementation will be faster."
Accessing numbered variables in a loop is slow. It is not fast.
You could change your data design to use one array, in which case you could write fast code.
Chuangchuang Sun
il 25 Gen 2018
Walter Roberson
il 25 Gen 2018
Chuangchuang Sun comments to me:
I am not naming them dynamically. I stack them in one matrix, or in a structure. does that make a difference?
James Tursa
il 25 Gen 2018
How large is n?
n is around 100
Risposte (1)
James Tursa
il 25 Gen 2018
Modificato: James Tursa
il 25 Gen 2018
0 voti
Since the A_i are sparse, you are probably stuck with your loop. Consider storing them as A{i} instead of A_i, however, to make looping easier. And code it such that you do the A{i}*x calculation only once.
Categorie
Scopri di più su Resizing and Reshaping Matrices in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!