Another option is to use one for loop to evaluate each matrix element on the mesh then sum the stacked matrices. This is also slow.
need help vectorizing a complicated loop
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi,
I need to evaluate a vector of a function on a mesh then sum that vector at each point on the mesh. Let me elaborate:
I have a mesh:
a = -0.5:0.001:0.5;
b = a;
[A,B]=meshgrid(a,b);
At each point on that mesh, I want to evaluate a function over a vector (here, instead of giving the vector values I'm just trying to indicate that I have some vectors with some length):
% I have 3 vectors of length 2000 with some data in them
s = 2000x1 double, c = 2000x1 double, y = 2000x1 double
%at each point A,B on grid evaluate:
fake_function_vec = (c.*A+s.*B-y).^2
%result is some vector of length 2000. Now sum that vector
fake_function = sen(fake_function_vec,1)
%repeat for every other point on the mesh
I can't figure out how to do this efficiently. I'm currently using two for loops to evaluate the function (which returns a vector) and summing that vector at each point in the grid. Surely there must be a better way!
Risposta accettata
Stephen23
il 17 Dic 2018
Modificato: Stephen23
il 19 Dic 2018
If you change the size of the s, c and y vectors to 1x1x2000 then this is easy. For MATLAB version R2016b or later:
s = rand(1,1,2000);
c = rand(1,1,2000);
y = rand(1,1,2000);
M = sum((c.*A+s.*B-y).^2,3)
For MATLAB versions prior to R2016b use bsxfun to replace the arithmetic operators.
Più risposte (0)
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!