2016-06-03 11 views
2

mit habe ich eine Funktion f(x, y, z) in Julia definiert und ich möchte berechnen f für viele Werte von x parallel, y und z fixiert zu halten. Was ist der "Best Practices" Weg, dies zu tun mit pmap?Fixing Argumente, wenn pmap in Julia

Es wäre schön, wenn es so etwas wie pmap(f, x, y = 5, z = 8) ist, das ist, wie die apply Familie feste Argumente in R behandelt, aber es scheint nicht so einfach zu sein wie die. Ich habe Lösungen entwickelt, aber ich finde sie unelegant und bezweifle, dass sie sich für meine Zwecke gut verallgemeinern werden.

  • kann ich f in einer Funktion g wo g(x) = f(x, y = 5, z = 8) wickeln. Dann rufe ich einfach pmap(g, x) an. Das ist weniger sparsam als ich es mir gewünscht hätte.
  • Ich kann 5 und 8 als Standardwerte für y und z festlegen, wenn f definiert ist und dann pmap(f, x) aufrufen. Dies macht mich unbehaglich in dem Fall, in dem ich y auf den Wert einer Variablen a beheben möchte, wo a (aus gutem Grund) nicht zu der Zeit definiert wurde, die f definiert ist, aber bis zum Zeitpunkt f wird aufgerufen werden. Es funktioniert, aber es beunruhigt mich irgendwie.

Antwort

8

Eine gute Lösung, die Ihre scheinbar unflexibel erste Option in eine flexible dreht man, ist eine anonyme Funktion zu verwenden, z.B.

g(y, z) = x -> f(x, y, z) 

pmap(g(5, 8), x) 

oder nur

pmap(x -> f(x, 5, 8), x) 

In Julia 0,4, haben anonyme Funktionen eine Leistungseinbuße, aber das wird in 0,5 verschwunden sein.

+0

Ach ja, ich freue mich schon auf die Beseitigung der Leistungsnacht, habe die Diskussion [auf github] (https://github.com/JuliaLang/julia/issues/1864) schon eine Weile verfolgt. –