2016-04-07 6 views
1

Angenommen, ich habe eine Funktion auf diese Weise definiert:Wie können Sie zusätzliche (statische) Eingabeargumente zu einer referenzierten Funktion in mapslices hinzufügen?

function InCylinder(cpt1, cpt2, radius, pt) 
    # return if pt is inside cylinder defined by cpt1,cpt2,radius 
end 

Ich möchte diese Funktion, um alle Punkte in einer Matrix wie folgt anzuwenden:

testM = rand(3,100) 

Ich fand, dass ich technisch nutzen könnten Funktion namens mapslices meine Punkte von der Matrix an die Funktion übergeben. Das sollte in etwa so aussehen:

mapslices(InCylinder,testM,1) 

Wie Sie sich vorstellen können, funktioniert dies nicht, da InCylinder viele mehr (statisch) Eingabewerte erfordert. Ich würde es gerne vermeiden, diese in die Matrix zu kopieren, vorausgesetzt, dass sich , cpt2 und radius nicht für alle pt in testM ändern.

Wie kann ich passieren cpt1, cpt2 und radius in InCylinder ohne zu viel Redundanz?

PS: Ich weiß, über die Matrix zu iterieren ist eine Option, aber das beantwortet meine Frage nicht.

Antwort

2

Versuchen Sie eine anonyme Funktion:

mapslices(x -> InCylinder(cpt1, cpt2, radius, x), testM, 1) 
+0

Jede Idee, wenn dies der effizienteste Weg ist? Ich lese anonyme Funktionen sind ziemlich langsam - sollte ich versuchen, nur die ganze Matrix statt einzelne Punkte in diese Funktion zu übergeben? – Chris

+2

Ich glaube nicht, dass Sie einen großen Leistungseinbruch bemerken sollten, aber Benchmarks sind die einzige Möglichkeit, die Sie wirklich kennen können. Auch auf etwas, auf das man sich freuen kann, haben auf Julia 0.5 anonyme Funktionen keine Leistung mehr. – spencerlyon2

Verwandte Themen