Create a matrix with multiple values at each element and apply a function to all?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Michael Bistacchi
am 9 Apr. 2020
Beantwortet: Steven Lord
am 9 Apr. 2020
This is for optimization purposes - I have 2 linspaces of parameters, and a 2 parameter function f (random values/function):
Xs = linspace(0, 1000, 1000)
Ys = linspace(0, 10000, 10000)
f = @(x, y) cos(x) + sin(y)
I want to populate a matrix M which has size [length(Xs), length(Ys)], where each element of M is f(x, y) for each x in Xs and y in Ys.
I can do this slowly with a for/parfor loop - how can I use direct vectorisation to achieve this?
Thanks
0 Kommentare
Akzeptierte Antwort
Steven Lord
am 9 Apr. 2020
If all the binary operations in your f function support implicit expansion (which is the case for your sample f, as plus supports implicit expansion) call it with vectors of different orientations.
Xs = linspace(0, 1000, 1000);
Ys = linspace(0, 10000, 10000);
f = @(x, y) cos(x) + sin(y);
M = f(Xs.', Ys);
Let's ensure M is the correct size.
isequal(size(M), [length(Xs), length(Ys)]) % true
We can spot-check an element or two of M to ensure it's the same as if we'd called your function with scalar inputs.
check = M(457, 9284) - f(Xs(457), Ys(9284)) % 0 difference
0 Kommentare
Weitere Antworten (1)
the cyclist
am 9 Apr. 2020
Here is one way:
[XXs,YYs] = meshgrid(Xs,Ys);
fxy = f(XXs,YYs);
0 Kommentare
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!