2016-08-09 278 views
7

Angenommen, ich tun f(x,y) = 2x + y dann map(f, [2,4,6],[1,1,1]) ich bekommen:Kann ich `map` mit fester Eingabe verwenden?

3-element Array{Int64,1}: 
    5 
    9 
13 

Wenn ich map(f, [2,4,6],1) tun, das heißt, ich möchte das gleiche immer anzunehmen, daß der zweite Eingang ist, ich bekommen:

1-element Array{Any,1}: 
5 

Das funktioniert also nicht. Gibt es eine Möglichkeit, dies zu tun, ohne einen Vector [1,1,1] zu codieren?

+0

Siehe auch diese verwandte Frage zu festen Schlüsselwortargumenten: http://StackOverflow.com/Questions/38906788/Julia-Passing-Argumente-to-Funktion-durch-die-Map-Funktion –

Antwort

8

Broadcast "verhält sich wie" es die Arrays ändert sich eine Größe zu sein, das funktioniert, und Karten:

broadcast(f, [2,4,6],1)

Ausgänge:

Int64[3] 
5 
9 
13 
+0

Gibt es eine parallele Entsprechung zu Broadcast , wie pmap() ist, um() zuzuordnen? –

+0

Es kann sein [wenn Sie die Entwickler wissen lassen, dass Sie hier eine wollen] (https://github.com/JuliaLang/julia/issues/17887). Es gibt einige Implementierungsdetails, die ausgearbeitet werden müssten ("map" muss keine Daten zwischen den unabhängigen Läufen teilen, während "broadcast" den kleinen Vektor in gewissem Sinne teilen muss), aber wenn mein Vorschlag genug Unterstützung bekommt , es sollte ein 'pbroadcast()' und auch Dinge wie 'tbroadcast()' für Threading geben. Siehe das Problem. –

+0

Ehrfürchtig. Das wäre toll. Ich werde meinen Stecker einstecken. –

2

Sie können map(x->f(x,1), [2,4,6]) verwenden, um dies zu erreichen.