Étant donnéY at-il quelque chose comme arrayfun, mais pour plusieurs dimensions?
X = [x0,x1,...,xN];
Y = [y0,y1,...,yM];
function result = f(x, y)
... % Cannot use broadcasting. Must take values. Returns a value.
end
Je veux obtenir une matrice
f(x0,y0) f(x0,y1) ... f(x0,yM)
f(x1,y0) f(x1,y1) ... f(x1,yM)
... ... ... ...
f(xN,y0) f(xN,y1) ... f(xN,yN)
Je sais que je peux utiliser deux boucles imbriquées for
, mais est-il quelque chose qui pourrait paralléliser cela? Quelque chose avec l'interface semblable à arrayfun
?
Pour les curieux f
fonction:
X = [some vector]
W = [some vector]
p(w) % returns a real number; for given vector, returns a vector
g(x, w) % returns value from X; can use broadcasting just like (x .* w).
function result = f(x, y) % takes 2 values from X
result = sum(p(W(g(x,W) == y)));
% | | - boolean vector
% | | - vector of some values from W
% | | - vector of some real values
% | | - a single value
end
[ 'this'] (http: //stackoverflow.com/questions/12522888/arrayfun-peut- être-significantly-slower-than-an-explicit-loop-in-matlab-why) pourrait valoir le détour. Pourriez-vous partager l'implémentation de la fonction 'f'? – Divakar
'arrayfun' n'est pas parallélisé, c'est juste une autre façon d'écrire une itération. Au moins dans les versions matlab récentes, je m'attends à ce qu'une boucle imbriquée soit aussi rapide que n'importe quelle autre solution. Sauf si vous l'avez fait en utilisant la radiodiffusion. – Daniel
FYI 'arrayfun' peut prendre plusieurs arguments:' arrayfun (@ (x, y) f (x, y), X, Y) ' – Geoff