असल में, पैटर्न मिलान आमतौर पर Function[{u},...]
निर्माण से तेज़ लगता है और #&
-प्रकार के निर्माण (संकलन की संभावना को अनदेखा कर रहा है, जो एमएमए 8 में अधिक रोमांचक हो गया है)।
SetAttributes[timeshort, HoldAll];
timeshort[expr_] := Module[{t = Timing[expr;][[1]], tries = 1},
While[t < 1.,
tries *= 2;
t = Timing[Do[expr, {tries}];][[1]]];
Return[t/tries]]
तो इस कोशिश:
इस समय के लिए कोड की कमी टुकड़े एक समारोह को परिभाषित देखने के लिए
ClearAll[f]; f[x_] := Cos[x]
Trace[f[5.]]
f[5] // timeshort
ClearAll[f]; f = Function[x, Cos[x]]
Trace[f[5.]]
f[5] // timeshort
ClearAll[f]; f = Cos[#] &
Trace[f[5.]]
f[5] // timeshort
जो दे
{f[5.],Cos[5.],0.283662}
8.45641\[Times]10^-7
Function[x,Cos[x]]
{{f,Function[x,Cos[x]]},Function[x,Cos[x]][5.],Cos[5.],0.283662}
1.51906\[Times]10^-6
Cos[#1]&
{{f,Cos[#1]&},(Cos[#1]&)[5.],Cos[5.],0.283662}
8.04602\[Times]10^-7
है कि, पैटर्न मिलान और #&
Function
से तेज़ हैं। मुझे कोई जानकारी नहीं है की क्यों।
संपादित करें: मान लीजिए कि मुझे पहले सुझाए गए प्रश्न बेलीसियस की जांच करनी चाहिए ... here अनिवार्य रूप से वही उत्तर देने के लिए देखें, और कुछ रोचक चर्चाओं के लिए टिप्पणियां भी पढ़ें।
संबंधित http://stackoverflow.com/questions/4187822/performance-difference-between-functions-and-pattern-matching-in-mathematica/4190348#4190348 –
अरे! यह फिर से हो रहा है। एमएमए टैग "गणित" –
के साथ भ्रमित हो जाता है, जहां आपको उसकी आवश्यकता होने पर @Leonid है ... – acl