Julia: `рдореИрдк (func, x)` . рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рд╕рд┐рддре░ 2014  ┬╖  283рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рдЗрд╕ рдкрд░ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред рдореБрдЭреЗ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рдереА, рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред

breaking speculative

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдХ рдмрд╛рд░ рдЬрдм рддреНрд░рдпреА рдХрд╛ рд╕рджрд╕реНрдп (рд╕реНрдЯреАрдлрди, рдЬреЗрдл, рд╡рд╛рдпрд░рд▓) #15032 (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд░реНрдЬ-рд░реЗрдбреА рд╣реИ) рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рд╢реЗрд╖ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛрдбрдореИрдк рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░реВрдВрдЧрд╛: рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рдХрд╛рд░-рдЧрдгрдирд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВ, рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВ @vectorize , .op рдХреЛ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд╢реБрдЧрд░ рдореЗрдВ рдмрджрд▓реЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕-рд▓реЗрд╡рд▓ "рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ-рдлрд╝реНрдпреВрдЬрд╝рди" рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрди-рдкреНрд▓реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реНрдпреВрдЬрд╝ рдХрд░реЗрдВред рдЕрдВрддрд┐рдо рджреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ 0.5 рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗред

рд╕рднреА 283 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1

рдпрд╛ func.(args...) рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рдХреЗ рд░реВрдк рдореЗрдВ

broadcast(func, args...)

рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЕрдХреЗрд▓рд╛ рд╣реВрдБ рдЬреЛ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛?
рдХрд┐рд╕реА рднреА рддрд░рд╣, +1ред

:-1: рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреАрдлрди рдХреЗ f[...] рдХреЗ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡ рдореЗрдВ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╕рдорд╛рдирддрд╛ рд╣реИред

@ihnorton рдХреА рддрд░рд╣, рдореБрдЭреЗ рднреА рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдмрд╣реБрдд рд╢реМрдХ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ a .+ b рдФрд░ sin.(a) рджреЛрдиреЛрдВ рд╣реЛрдиреЗ рдХреА рд╡рд┐рд╖рдорддрд╛ рдирд╛рдкрд╕рдВрдж рд╣реИред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред #1470 рдХреЗ рд╕рд╛рде, рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

call(f::Callable,x::AbstractArray) = applicable(f,x) ? apply(f,x) : map(f,x)

рд╕рд╣реА? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдСрдЯреЛ-рдореИрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдмрд╣реБрдд рдЬрд╛рджреБрдИ рд╣реЛрдЧрд╛ред

@quinnj рд╡рд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЙрд▓ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдбрд░ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдореИрдВ рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рд╕реЛ рдирд╣реАрдВ рдкрд╛рдКрдВрдЧрд╛ред

рдЕрднреА рддрдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди .sin(x) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ рдпрд╣ a .+ b рдХреЗ рд╕рдорд╛рди рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [] рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╢рд╛рдпрдж Int(x) рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди Int[x] рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорддрд▓рдм map рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

рдореИрдВ .sin(x) рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдЬ рдкрд░ рд░рд╣реВрдВрдЧрд╛ред

рд╣рдореЗрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ Int(x) рд╕реНрдХреЗрд▓рд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рддреЛ Int[x] рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ Int ред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЙрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ f[v] рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдмрд╕реЗ рдЖрдХрд░реНрд╖рдХ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

f[v] рдХреЗ рд▓рд┐рдП map рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛рдиреЗ рд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдХреИрд╕реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред map рдореЗрдВ рдореМрдЬреВрджрд╛ T[...] рд╕рд░рдгреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ "рдЖрдХрд╛рд░" рд╣реИред Vector{Int}[...] рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛?

рд▓реЙрд▓, рдбрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ @JeffBezanson! рд╣рд╛рд╣рд╛, рдХреЙрд▓ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИ, рд╣рд░ рдмрд╛рд░ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХреЛрдб рдСрдмрдлрд╕реНрдХреЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ call рдХреЗ рд╕рд╛рде, рдЖрдк рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .sin(x) рднреА рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдмрд╣реБ-рдЖрд░реНрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдереА?

:-1:. рдЙрдЪреНрдЪ рдСрд░реНрдбрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд▓рд╛рдЧрдд рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ .func() / func.() рдФрд░ func() рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣рд░ рдЬрдЧрд╣ рдлреИрд▓реА рд╣реБрдИ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрдо рд╕реЗ рдХрдо a.(b) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡реИрд╕реЗ рднреА рд╣рдЯрд╛ рджреЗрдВрдЧреЗред

рд╡рд╛рд╣, рдордзреБрдордХреНрдЦрд┐рдпреЛрдВ рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ! рдЪрд░реНрдЪрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ред

рд╣рдо 2-рддрд░реНрдХ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ map рд╕реЗ zipWith :)

рдпрджрд┐ рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ [f <- b] рдпрд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ _рд╕рдордЭреМрддреЗ рдкрд░ рдХреЛрдИ рдЕрдиреНрдп рд╡рд╛рдХреНрдп рдХреИрд╕реЗ рд╣реЛрдЧрд╛?

( @JeffBezanson рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдбрд░ рд╣реИ рдХрд┐ рдХреЛрдИ Don't do stupid stuff: I won't optimize that рдпрд╛ Moose.jl рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ :) ...

рд╡рд░реНрддрдорд╛рди рдореЗрдВ Int[...] рд▓рд┐рдЦрдирд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ Int рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ Int(x) рдХрд╛ рдЕрд░реНрде рд╣реИ x рдХреЛ Int рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ Int рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рддреЛ рдЖрдк Int[...] рдХрд╛ рдЕрд░реНрде " Int рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Int ред рддреЛ Int[v] [ Int(x) for x in v ] рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ рдФрд░ Int[ f(x) for x in v ] рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ [ Int(f(x)) for x in v ] ред рдмреЗрд╢рдХ, рддрдм рдЖрдкрдиреЗ Int[ f(x) for x in v ] рд▓рд┐рдЦрдиреЗ рдХреА рдХреБрдЫ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЦреЛ рджреА рд╣реИ - рдпрд╛рдиреА рд╣рдо рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ Int рд╣реИ - рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ Int(x) рдХреЛ Int (рдПрдХ рдЕрдиреБрдЪрд┐рдд рдмрд╛рдзрд╛ рдирд╣реАрдВ) рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрдм рд╣рдо рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡реАрдХрд░рдг/рдирд┐рд╣рд┐рдд-рдмрд┐рд▓реНрд▓реА рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░рддрд╛ рд╣реИред Int[x, y] рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛? рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, Vector{Int}[x] ?

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рдХрд╛рд▓рдд рднреА рдХрд░ рд░рд╣рд╛ рд╣реИ - рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рдПрдХ рд╣реИрдХ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдкреИрдЯрд░реНрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЬреАрдд рд╣реЛрдЧреАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ f[v,w] рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ - рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк [ f(x,y) for x in v, y in w ] рдпрд╛ map(f,v,w) рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ a.(b) рдХрд╛ рд╢рд╛рдпрдж рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛ рдФрд░ рдпрд╣ рдЬрдВрдЧрд▓реА рдореЗрдВ ~ 4,000 рдЬреВрд▓рд┐рдпрд╛ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 54 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://gist.github.com/jakebolewski/104458397f2e97a3d57dред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИред T[x] рдореЗрдВ "рдЖрдХрд╛рд░" T --> Array{T} рд╣реИ, рдЬрдмрдХрд┐ map рдХрд╛ рдЖрдХрд╛рд░ Array{T} --> Array{S} рд╣реИред рд╡реЗ рдХрд╛рдлреА рдЕрд╕рдВрдЧрдд рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ T[x,y,z] рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ $ Vector{T} ред рд╕рд╛рджрд╛ рдкреБрд░рд╛рдиреА рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордг, A[I] рдЬрд╣рд╛рдВ I рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдХреЛ map(i->A[i], I) рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕рд░рдгреА "рд▓рд╛рдЧреВ рдХрд░рдирд╛" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ (рдмреЗрд╢рдХ рдореИрдЯрд▓реИрдм рднреА рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдк-рд╡реЗрдХреНрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЦреЛ рджреЗрдВрдЧреЗред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдмрд╣рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: map рддреЗрдЬ рдмрдирд╛рдирд╛ред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ map рддреЗрдЬ рдмрдирд╛рдирд╛ (рдЬреЛ, рд╡реИрд╕реЗ, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рдлреА рдЧрд╣рди рд░реАрдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ sin(x) рд╕реЗ map(sin, x) рддрдХ рдЬрд╛рдирд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, sin(x) рд╕реЗ map(sin, x) рдкрд░ рдЬрд╛рдирд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдорддред

рдореИрдВ @JeffBezanson рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ f[x] рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг Int[x, y] рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдЕрд╕рдВрдЧрдд рд╣реИред

.sin рдХреЛ sin. $ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдиреНрдп рдХрд╛рд░рдг рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ рдЬреИрд╕реЗ Base.(+) # Base рдореЗрдВ + рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП (рдПрдХ рдмрд╛рд░ a.(b) рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдЬрдм рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ sin (рдпрд╛ рдЬреЛ рднреА) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдкрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо Module..sin(v) рдХрд░рддреЗ рд╣реИрдВ? Module.(.sin(v)) ? Module.(.sin)(v) ? .Module.sin(v) ?

рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдХрд▓реНрдк рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдЫреВрдЯ рдЧрдИ рд╣реИред рдпрд╛рдиреА: рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рддрд░реНрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореИрдк рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ map(func, container) рд╕рд┐рдВрдЯреИрдХреНрд╕ _already_ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрдИ рддрд░реНрдХреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░реА рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП map(x->func(x,other,args), container) рдХреА рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рд▓реЗрдВ, рдпрд╛ рдЗрд╕реЗ рдмрджрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рдЪреЗрди рдХрд░реЗрдВ filter(x->func2(x[1]) == val, map(x->func1(x,other,args), container)) ред

рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЫреЛрдЯрд╛ рдирдХреНрд╢рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреНрдпрд╛рджрд╛ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рдП) рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб map рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдмреА) рдореБрдЭреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рдж рдкрд╛рдЗрдирд┐рдВрдЧ рдкрд╕рдВрдж рд╣реИред ;)

рдЖрдИрдЖрдИрдЖрд░рд╕реА, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд filter ((==val) . func2 . fst) $ map (func1 other args) container рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде func1 5$#$ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрд▓реНрдо рдореЗрдВ .func рдХреЛ x->x.func рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдПрд▓реНрдо рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦреЗрдВред рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ map рдХреЗ рд▓рд┐рдП рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд╡рд╣ рдкрд╕рдВрдж рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдЗрддрдиреА рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдиреА рдХрд┐ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВред

рд╣рд╛рдВ, рдпрд╣ рдпрд╣рд╛рдВ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ "рдирд┐рдЬреА" рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИрдВред рд▓реЗрдХрд┐рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд▓ рд░рд╣реА рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде, рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрджрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

f.(x) рдХрдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╡рд┐рд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдерд╛ .+ ред рд▓реЗрдХрд┐рди . рдХреЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЬреБрдбрд╝рд╛рд╡ рдХреЛ "рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди" рдореЗрдВ рд░рдЦрдирд╛ IMHO рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ func[v...] рдХрд╛ рдЕрдиреБрд╡рд╛рдж map(func, v...) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд▓рд┐рдЯрд░рд▓ рд╕рд░рдгреА рдХреЛ T[[a1, ..., an]] (рд╡рд░реНрддрдорд╛рди T[a1, ..., an] рдХреЗ рдмрдЬрд╛рдп) рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдореБрдЭреЗ sinтИШv рд╢рд╛рдВрдд рдкреНрд░рд╛рдХреГрддрд┐рдХ рднреА рдорд┐рд▓рддрд╛ рд╣реИ (рдЬрдм рдПрдХ рд╕рд░рдгреА v рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдирд┐рд╣рд┐рдд рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдпрд╛ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд░реВрдк рд╕реЗ sin*v рдпрд╛ v*[sin]' ( рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП *(x, f::Callable) ) рдЖрджрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдирдП рджрд┐рдорд╛рдЧ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдХрд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ f.(x) рдХреЛ рдХрд╛рдлреА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ f. рдФрд░ ( рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕реЗ f рдФрд░ .( рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред .( рддрдм рд▓рд╛рдХреНрд╖рдгрд┐рдХ рд░реВрдк рд╕реЗ ( рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдПрдХ рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ .+ рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИред

.( рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рдмрд╣реБрдд рджреБрдЦреА рдХрд░рддрд╛ рд╣реИред

@johnmyleswhite рдХреЗрдпрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдореИрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рд╕рд╣рдЬрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╛ рдпрд╣ рдмрд╛рдХреА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рд╕реНрдерд┐рд░рддрд╛ рд╣реИ, рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред

рдореЗрд░реЗ рд▓рд┐рдП, ( рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .( рдФрд░ ( рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ред рдХреНрдпрд╛ рдкреВрд░реНрд╡ $#$ call Expr $#$ рдХреЗ рдмрдЬрд╛рдп multicall Expr рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ?

рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ _visually_ рд╕рдВрдЧрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХреНрдпрд╛ рдорд╛рд░рддрд╛ рд╣реИ рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдмрд╣реБ-рддрд░реНрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рджрд┐рд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рд░ рд╕рдВрднрд╡ рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рдХреБрдЫ рднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдмрд╣реБрдЖрдпрд╛рдореА рд╕рд░рдгреА рд╕рдордЭ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рд╕рднреА рддрд░реНрдХреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рддрд░реНрдХ map рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИред
рдЕрдЧрд░ рд╣рдордиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рддреЛ рдореИрдВ .( рдХреЙрд▓ рдЯреВ рдореИрдк рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ред рд╡рд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрди рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБ-рддрд░реНрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╕рдВрднрд╡ рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЬреИрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╣рдореЗрдВ рдмрд╕ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕рдорд╛рдзрд╛рди рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ: https://github.com/JuliaLang/julia/issues/8389#issuecomment -55953120 (рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ)ред рдЬреИрд╕рд╛ рдХрд┐ @JeffBezanson рдиреЗ рдХрд╣рд╛ рдХрд┐ map рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдЪрд┐рдд рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдирджрдВрдб @vectorize_2arg рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ sin.(x) рдФрд░ x .+ y рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ .sin(x) -> map(sin, x) рдФрд░ x .+ y -> map(+, x, y) рд╣реЛрдЧрд╛ред

.+ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ broadcast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░, рд╢реБрджреНрдз рд╣рддрд╛рд╢рд╛ рд╕реЗ рдмрд╛рд╣рд░:

  1. рдЕрдзрд┐рднрд╛рд░ рдмреГрд╣рджрд╛рдиреНрддреНрд░, sin:x ред рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  2. sin.[x] --- рдпрд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд░реНрдерд╣реАрди рд╣реИред
  3. sin@x --- рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рди рд╣реА рдореИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ f.(x) рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╣рдо рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ int() рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдореЗрдВ? рдЗрд╕рдиреЗ рдореБрдЭреЗ https://github.com/JuliaLang/julia/issues/8389 рдореЗрдВ рдпрд╣ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ map(func, x) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрддрдирд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдФрд░ рд╣рд╛рдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рддреЗрдЬрд╝ рд╣реИред

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЖрд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрдЧреА (рдХрдо рд╕реЗ рдХрдо, рдореБрдЭреЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ), рдФрд░ рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЧрддрд┐ рд╣реИ: рдЬрдм рддрдХ рдЖрдк log , exp , рдЖрджрд┐ рд╕рд╣рд┐рдд рд╕рднреА рд╡рд░реНрддрдорд╛рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ (рдЬреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░реАрдХреНрд╖рдг), рднрд╛рд╖рд╛ рдЕрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдФрд░ рдХрд┐рд╕ рддрд░реНрдХ рдкрд░)ред

рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рд╡реЗрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрд╛, рдЕрдзрд┐рдХрд╛рдВрд╢/рд╕рднреА рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣рдореЗрд╢рд╛ рд░рдгрдиреАрддрд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ред

рд╣рд╛рдВ, _course_ рдХреЗ рд╣рдо рд╕рдм рдХреБрдЫ рд╡реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗред рдЕрд╕рдВрдЧрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ: рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдард┐рди рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВ рдпрд╛ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдареЛрд╕ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ sin , exp рдЖрджрд┐ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╕рднреА рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдкрд░ @vectorize рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ; рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рд╡реЗ map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЧрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:

  1. рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ $#$ exp(x) $#$ рдХреЗ рдмрдЬрд╛рдп map(exp, x) рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА рдмрд╛рдж рд╡рд╛рд▓рд╛ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ _рдмрдбрд╝рд╛_ рдЕрдВрддрд░ рдореМрдЬреВрдж рд╣реИред рдореЗрд░реА рдорд╢реАрди рдкрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдп рд▓рдЧрднрдЧ 5x рддреЗрдЬ рд╣реИред
  2. рдЬрдм рдЖрдк рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддреА рд╣реИред рдПрдХ рдпреМрдЧрд┐рдХ рд╡реНрдпрдВрдЬрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: exp(0.5 * abs2(x - y)) , рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
# baseline: the shortest way
exp(0.5 * abs2(x - y))    # ... takes 0.03762 sec (for 10^6 elements)

# using map (very cumbersome for compound expressions)
map(exp, 0.5 * map(abs2, x - y))   # ... takes 0.1304 sec (about 3.5x slower)

# using anonymous function (shorter for compound expressions)
map((u, v) -> 0.5 * exp(abs2(u - v)), x, y)   # ... takes 0.2228 sec (even slower, about 6x baseline)

# using array comprehension (we have to deal with two array arguments)

# method 1:  using zip to combine the arguments (readability not bad)
[0.5 * exp(abs2(u - v)) for (u, v) in zip(x, y)]  # ... takes 0.140 sec, comparable to using map

# method 2:  using index, resulting in a slightly longer statement
[0.5 * exp(abs2(x[i] - y[i])) for i = 1:length(x)]  # ... takes 0.016 sec, 2x faster than baseline 

рдпрджрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЧрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкрдардиреАрдпрддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╕рд░рдгреА рд╕рдордЭ рд╣реИред рдлрд┐рд░ рднреА, рд╡реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЧрдгрд┐рдд рдХреА рддрд░рд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИрдВред

-1 рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реАрдПрдордПрд▓ рдФрд░ рдпреЗрдкреНрдк рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдХрд╛ рд▓рд╛рдн рдХреИрд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рдПред

рдпреЗ рдЖрдзрд╛рд░ рдореЗрдВ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЪрд░реНрдЪрд╛ рдФрд░ рдПрдХ рдмрдбрд╝реА рдЪрд░реНрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рд╣реИ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@lindahua рдФрд░ @ViralBShah : рдЖрдкрдХреА рдХреБрдЫ рдЪрд┐рдВрддрд╛рдПрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рд╣рдо map рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @lindahua рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рдмрддрд╛ рд░рд╣рд╛ рд╣реИ: рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрдгрд┐рдд рдХреЗ рдлрд╛рд░реНрдореВрд▓реЗ рдХреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдФрд░ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред рдореБрдЭреЗ рдЗрд╕реЗ рдЦреЛрдирд╛ рдХрд╛рдлреА рдмреБрд░рд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЕрдиреНрдп рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╢рд╛рдпрдж рдЗрд╕реЗ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд┐рдВрджреБ рдорд╛рдирдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рд╕рднреА рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ (рдЬрдм map рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реИ), рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рд░реБрдЪрд┐ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдФрд░ рдпрд╣ рдЕрднреА рднреА рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдкрд░ рдЬреЛрд░ рджреЗрддреА рд╣реИ (рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдВ рдкрд░реЗрд╢рд╛рди рд╣реИрдВ), рдФрд░ рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ (рд╕реВрддреНрд░ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдЯрд▓реИрдм, рдЖрд░ рдФрд░ рдирдореНрдкреА рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ (рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдПрдХ рдореБрджреНрджрд╛ рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рджреВрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдЪрд░реНрдЪрд╛ рд╕реЗ рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЧрдгрд┐рдд рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рджрд┐рд╢ рдЧрдгрд┐рдд рдХреЗ рдореБрдЦреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ - рдпрд╣ "рдзреАрдореА рдлреЙрд░-рд▓реВрдк рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ" рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред

y = exp(x) рдФрд░ . рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛

for i = 1:length(x)
    y[i] = exp(x[i])
end

рдкреВрд░реНрд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдкрдардиреАрдп рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рд▓реВрдк рдХреЛ рдХреБрд╢рд▓ рдмрдирд╛рддреА рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЛрдб рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреНрд░рддрд┐рдХреВрд▓ рд╣реИред

рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рддрд░рдл, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдРрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ; рджреВрд╕рд░реА рдУрд░, рд╣рдореЗрдВ рд╕рджрд┐рд╢ рдЧрдгрд┐рдд рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рднреА рд╡реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдмреЛрдЭрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХреЛрдб рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рддрд░рдл рдкреНрд░рджрд░реНрд╢рди, рд╡реЗ рдЕрднреА рднреА map рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдпреМрдЧрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред

рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдЪреАрдЬ рдХреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдЧрд╛, рдЬрд┐рдирдХрд╛ рдЕрднреА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрджрд┐ рдирдХреНрд╢рд╛ рддреЗрдЬ рд╣реЛрддрд╛, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдФрд░ рд╕рд╛рд░реНрдердХ рд╕реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдХреНрд╢рд╛ рд╕рдВрдХреЗрддрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдпрд╣ рдЖрджрдд рд░рд╣рд╕реНрдп рдХреЛрдб рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдХреЛрдб рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдкреИрдХреЗрдЬ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди f рд╡реЗрдХреНрдЯрд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдкрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддрддреНрд╡-рд╡рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╡реЗрдХреНрдЯрд░ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрди рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЕрдм рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд░реАрдм рд╣реЛрдВрдЧреЗред

рдпрд╣ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдУрд░ рднреА рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреЛ рдХреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╡рд╣ рд▓реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @lindahua рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡рд░реНрдмреЛрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЕрдкрдиреА рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рд╣реЛрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреА рд╣реЛрддреА рд╣реИред

рдпрд╣ map рд╕рдордЭреМрддрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рдХреЗ рдХрд░реАрдм рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА @lindahua рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдЬрд╣рд╛рдВ рдореИрдВ @lindahua рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рдореЗрд░рд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ map рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрдВрдХрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдердореИрдЯрд┐рдХрд╛ рдЕрдкрдиреЗ рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб рдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб рдиреЛрдЯреЗрд╢рди @ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк Apply рдлрд╝рдВрдХреНрд╢рди f рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ: f @ vector . рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб рдиреЛрдЯреЗрд╢рди /@ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП f рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ: f /@ vector ред рдЗрд╕рдореЗрдВ рдХрдИ рдЖрдХрд░реНрд╖рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рджреЛрдиреЛрдВ рд╢реЙрд░реНрдЯ-рд╣реИрдВрдбреНрд╕ рдЯреЗрдврд╝реЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ @ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдмрдВрдз рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ / рдЕрднреА рднреА рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдФрд░ рдЬрдм рдЖрдк рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдХрд╣рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдЧрдгрд┐рдд рдХреЗ рдЕрдВрдХрди рдХреА рдЖрдБрдЦ рдмрдВрдж рдХрд░рдХреЗ рдирдХрд▓ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрддрди рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ

рдореИрдВ рд╕рднреА рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВред рдЙрд╕ рдЯреНрд░реЗрди рдХреЛ рд╕реНрдЯреЗрд╢рди рд╕реЗ рдирд┐рдХрд▓реЗ рдХрд╛рдлреА рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЫреЛрдЯрд╛ рд░рдЦреЗрдВ рдФрд░ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдХреНрд╢рд╛ рд╕рдВрдХреЗрддрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

рдпрд╣ рд╕рдм, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, map рдкрд░ рд╕рд╢рд░реНрдд рд╣реИ рдФрд░ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рддреЗрдЬреА рд╕реЗ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЕрднреА рдЬреВрд▓рд┐рдпрд╛ рдЕрдЬреАрдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред рдпрд╣ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдорд╛рдорд▓рд╛ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реЛрддреЗ рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рдзреАрдореЗ рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рдзреАрдореЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╣реАрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реЗ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдХреА рдереА, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░рдгреЛрдВ рд╕реЗред

рд╡реЗрдХреНрдЯрд░рдХреГрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдиреБрдХрд╕рд╛рди рд╣реИ - рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЗрд╡рд▓ рд╡реЗ рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sin(x) рдПрдХ рд╡реЗрдХреНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рддреЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ sin(2*x) рдЕрдЪрд╛рдирдХ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рджреЛ рдмрд╛рд░ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдкрд╣рд▓реЗ рд▓реЗрдЦрди, рдлрд┐рд░ рдкрдврд╝рдирд╛)ред

рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ рдЧрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛрдЧрд╛ред рдпреЗ sin , cos , рдЖрджрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдВрдЧреЗ рдЬреЛ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП LLVM рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред LLVM рддрдм рдЗрд╕ рд▓реВрдк рдХреЛ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╣реА рдХреБрд╢рд▓ рдХреЛрдб рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗрдкреНрдк рдХреЗ рдкрд╛рд╕ рд╕рд╣реА рд▓реВрдк рдХрд░реНрдиреЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмреЗрдирдХрд╛рдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЖрд╢реАрд░реНрд╡рд╛рджрд┐рдд рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ DataArrays рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдирдП рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛрдб рдХреА рдПрдХ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд░рд╛рд╢рд┐ рд╣реИред

рдЗрд╕реЗ @eschnett рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдВ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

  • рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ
  • рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ

рдореИрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рджрд┐рд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдпрд╣ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдРрд╕реЗ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕рджрд┐рд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдЬреИрд╕рд╛ рд╣реЛред map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ _vectorizable_ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд░рдиреЗ рдХрд╛ @eschnett рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдлрд╝реНрдпреВрдЬреНрдб рд▓реВрдк рдореЗрдВ рднреА рдлрд╝реНрдпреВрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░реЗ рдорди рдореЗрдВ рд╣реИ, рдЬреЛ @eschnett рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИ:

# The <strong i="11">@vec</strong> macro tags the function that follows as vectorizable
<strong i="12">@vec</strong> abs2(x::Real) = x * x
<strong i="13">@vec</strong> function exp(x::Real) 
   # ... internal implementation ...
end

exp(2.0)  # simply calls the function

x = rand(100);
exp(x)    # maps exp to x, as exp is tagged as vectorizable

exp(abs2(x))  # maps v -> exp(abs2(v)), as this is applying a chain of vectorizable functions

рд╕рд┐рдордб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдХреЗ рд╕рдВрдХрд▓рдХ рдЧрдгрдирд╛ (рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░) рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдмреЗрд╢рдХ, @vec рдХреЛ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд▓реЛрдЧ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХреЗрдВред

рдзрдиреНрдпрд╡рд╛рдж, @ рд▓рд┐рдВрдбрд╛рд╣реБрдЖ : рдЖрдкрдХреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓рддреА рд╣реИред

рдХреНрдпрд╛ @vec рдлрд╝рдВрдХреНрд╢рди @pure рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛?

@vec рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрддреНрд╡-рд╡рд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рднреА рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sum рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ _vectorizable_ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред

pure рд╕реЗ pure vec рдХреА sum рдХреА рд╕рдВрдкрддреНрддрд┐ рдФрд░ + рдкрд░ + associative рдЯреИрдЧ рдХреЗ рд╕рд╛рде-рд╕рд╛рде reduce рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ foldl / foldr рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм pure рдФрд░ associative рдлрд╝рдВрдХреНрд╢рди рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ? рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдХреНрд╖рдгреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереА, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рдХреНрд╖рдгреЛрдВ рдкрд░ рднреА рдЬрд╛рдХрд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд▓рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рд╣рдо рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ (рдХрд┐рд╕реА рднреА [] рдФрд░ рдбрд┐рдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред рдЗрди рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреВрд░рд╛ _point_ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ (рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирдХреНрд╢рд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рддреЛ рдХреНрдпреЛрдВ рди рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрдиреНрдлрд┐рдХреНрд╕ map рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВ? рдпрд╣рд╛рдВ рдореИрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ $ рдЪреБрдиреВрдВрдЧрд╛ред рдЗрд╕рд╕реЗ @lindahua рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛

exp(0.5 * abs2(x - y))

рдкреНрд░рддрд┐

exp $ (0.5 * abs2 $ (x-y))

рдЕрдм, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдирдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕рд╛ рд╕рдорд░реНрдерди рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди ($) = map рд╣реЛрдЧрд╛ред :)

рдЖрдИрдПрдордУ, рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореМрдЬреВрджрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВ, рдФрд░ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдорд╛рдирд╕рд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • foo.(x) -- рджрд┐рдЦрдиреЗ рдореЗрдВ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдкрд╣реБрдВрдЪ рдХреЗ рд╕рдорд╛рди
  • foo[x] -- рдХреНрдпрд╛ рдореИрдВ foo рд╕рд░рдгреА рдХреЗ x-рд╡реЗрдВ рд╕рджрд╕реНрдп рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдпрд╣рд╛рдВ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?
  • .foo(x) -- рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @kmsquire рдиреЗ рдмрддрд╛рдпрд╛

рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @vec рд╕рдорд╛рдзрд╛рди @vectorize рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЯрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреБрдЫ рдПрдиреЛрдЯреЗрд╢рди ala #8297 рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрдорд╛рд░реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рддрдм рдЗрди рд╕реНрдЯреНрд░реАрдо рдлрд╝реНрдпреВрдЬрд╝рди рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬрдмрд░рджрд╕реНрддреА рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдЗрдВрдлрд┐рдХреНрд╕ рдореИрдк рдФрд░ рддреЗрдЬреА рд╕реЗ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рднреА рдЕрд╕реНрдерд╛рдпреА рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

(x, y) -> exp(0.5 * abs2(x - y)) $ x, y

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╢рд╛рдВрдд рдирдП Trait.jl рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо Function рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ _instances_ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓реЗ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЕрдм, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕рд╛ рд╕рдорд░реНрдерди рд╣реИ

6582 #6929 рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╕рд░рдгреА рдЕрд╕реНрдерд╛рдпреА рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рджрд┐рд╢ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред рд╡реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рд╡реЗрдХреНрдЯрд░рдХреГрдд exp(x) рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ; рд╡реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ

y =  тИЪ╧А exp(-x^2) * sin(k*x) + im * log(x-1)

рдФрд░ рдЗрд╕реЗ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ

рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рдЧрд▓ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдЗрдЯрдХреЛрдб (рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓ рдирд╣реАрдВ) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрдиреБрдХреВрд▓рдХ рдЕрднреА рднреА рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗред рдЙрдиреНрд╣реЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рднреА рдХрд╛рдо рдЪрд▓ рдЬрд╛рдПрдЧрд╛ред

рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдпреЗрдкреНрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдХреЛрдИ рд╢рд╛рдЦрд╛ рдирд╣реАрдВ, рдХреЛрдИ рдЯреЗрдмрд▓, рдбрд┐рд╡реАрдЬрди рдпрд╛ рд╕реНрдХреНрд╡рд╛рдпрд░ рд░реВрдЯ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╡реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдЕрдиреНрдпрдерд╛ рдХрдИ рдлрд╝реНрдпреВрдЬреНрдб рдЧреБрдгрд╛-рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╡реЗрдХреНрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рд╕рдВрдЪрд╛рд▓рди рдорд░реНрдЬ рдХрд░реЗрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдВрдЧреЗ, рдпрд╛рдиреА рдХрд┐рд╕реА рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрдирдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд┐рд░реНрджреЗрд╢ рдХреБрд╢рд▓ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрддреАрдд рдореЗрдВ (https://bitbucket.org/eschnett/vecmathlib/wiki/Home) C++ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде (рд╕реНрдЯреИрдВрд╕рд┐рд▓-рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдЬреЛ рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ рд╕рдВрдХрд▓рдХ)ред

рдпрд╣рд╛рдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ, рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ (рдП) рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╣реЛрдЧрд╛, рдФрд░ (рдмреА) рд╣рдо рдЗрд╕реЗ рд╕реА ++ (рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕) рдХреЗ рдмрдЬрд╛рдп рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ: рдпрджрд┐ рдХреЛрдИ рдЖрдИрдИрдИрдИ рдорд╛рдирдХ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛рдПрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдпрд╣ рдХрд┐ рдЗрдирдкреБрдЯ рд╣рдореЗрд╢рд╛ sqrt(max(Double)) рд╕реЗ рдХрдо рд╣реЛрдЧрд╛, рдЖрджрд┐ред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рдкрде рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рдПред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ exp рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддреИрдпрд╛рд░ рдХрд░рдиреЗ рджреЗрдВред рдлрд┐рд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ LLVM рд▓реВрдк рдХреЛ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдкрд░ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдХреМрди рд╕реА рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреВрд░реНрдг-рдЪреМрдбрд╝рд╛рдИ рд╡рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд╣реИ~

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╡рд╣реА рдмрд╛рдд рджреЛрд╣рд░рд╛ рд░рд╣рд╛ рдерд╛ @johnmyleswhite рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рдКрдкрд░ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓рдЧреЗ рд░рд╣реЛред

@eschnett рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг (рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ (рдЪрд╛рд╣реЗ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ) рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдФрд░ рд╕рдордп рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╕реНрдерд┐рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП log рдХреЛ рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ openlibm рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

OTOH @johnmyleswhite рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЧрдгрд┐рддреАрдп рдЧреБрдг рдХреНрдпрд╛ рд╣реИрдВ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдмреЗрд╣рддрд░реАрди рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ( @lindahua рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдХрд╣реАрдВ рд╕реБрдЭрд╛рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред)

рдЕрдм, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕рд╛ рд╕рдорд░реНрдерди рд╣реИ

6582 #6929 рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛: ... рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд _рдЧреИрд░-рдпреВрдирд┐рдХреЛрдб_ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ $ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╣, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ _today_ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ "рддреЗрдЬрд╝" рди рд╣реЛ ... рдЕрднреА рддрдХ):

julia> ($) = map
julia> sin $ (0.5 * (abs2 $ (x-y)))

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ map рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди $ рдХреЗ рд▓рд┐рдП xor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд░реНрдмрд╛рджреА рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ xor рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред map рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдКрдкрд░ @jiahao рдХрд╛ рдмрд┐рдВрджреБ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ: рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдп рдЬреИрд╕реЗ exp рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рдХреГрдд _expressions_ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдХ рдХреА рддрд░рд╣ рд╣реИрдВ exp(-x^2) ред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛ @devec рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛: рдЖрдкрдХреЛ рд╡рд┐рдЪрд▓рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЕрдЪреНрдЫреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдХрдо рд╕рдВрддреЛрд╖рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЪрд░реНрдЪрд╛ рдЧрд▓рдд рдкреЗрдбрд╝ рдХреЗ рднреМрдВрдХрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИред

рдмреНрд░реЗрдирд╕реНрдЯреЙрд░реНрдорд┐рдВрдЧ: рдЖрдк рдЙрди рддрд░реНрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдореИрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдмрд╣реБ-рдЖрд░реНрдЧ рдореИрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗ:

a = split("the quick brown")
b = split("fox deer bear")
c = split("jumped over the lazy")
d = split("dog cat")
e = string(a, " ", b., " ", c, " ", d.) # -> 3x2 Vector{String} of the combinations   
# e[1,1]: """["the","quick", "brown"] fox ["jumped","over","the","lazy"] dog"""

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ .b рдпрд╛ b. рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЖрдк рдореИрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдмрд╣реБ-рдЖрдпрд╛рдореА 3x2 рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ map рдкрд┐рдВрдЧ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдХрдВрджрд░рд╛

рдпрд╣рд╛рдБ https://github.com/eschnett/Vecmathlib.jl рдПрдХ рдирдореВрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдкреЛ рд╣реИ
exp рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ LLVM рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдирдХ exp . рд╕реЗ рд▓рдЧрднрдЧ рджреЛрдЧреБрдирд╛ рддреЗрдЬрд╝ рд╣реИ
рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдпрд╣ (рд╢рд╛рдпрдж) рдЕрднреА рддрдХ рдпреЗрдкреНрдк рдХреА рдЧрддрд┐ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдкрд╛рдпрд╛ рд╣реИ,
рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ LLVM рд╕рдВрдмрдВрдзрд┐рдд SIMD рд▓реВрдк рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ Yeppp рдХреЗ рд░реВрдк рдореЗрдВред (рдореИрдВрдиреЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреАред)

рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп exp рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

function kernel_vexp2{T}(ni::Int, nj::Int, x::Array{T,1}, y::Array{T,1})
    for j in 1:nj
        <strong i="16">@simd</strong> for i in 1:ni
            <strong i="17">@inbounds</strong> y[i] += vexp2(x[i])
        end
    end
end

рдЬрд╣рд╛рдВ j рд▓реВрдк рдФрд░ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗрд╡рд▓ рдХреЗ рд▓рд┐рдП рд╣реИрдВ
рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВред

рдХреНрдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ @unroll рдореИрдХреНрд░реЛ рд╣реИ?

-рдПрд░рд┐рдХреЛ

2 рдирд╡рдВрдмрд░, 2014 рдХреЛ рд░рд╛рдд 8:26 рдмрдЬреЗ, рдЯрд┐рдо рд╣реЛрд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ
рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧред рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдПрдХ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ
рдЧрд▓рдд рдкреЗрдбрд╝ рдХреЛ рдХрд╛рдЯрдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/8450#issuecomment -61433026ред

рдПрд░рд┐рдХ рд╢реНрдиреЗрдЯрд░ [email protected]
http://www.perimeterinstitute.ca/personal/eschnetter/

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдп рдЬреИрд╕реЗ exp рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рдХреГрдд _expressions_ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдХ рдХреА рддрд░рд╣ рд╣реИрдВ exp(-x^2)

рд╕реНрдХреЗрд▓рд░ рдбреЛрдореЗрди рд╕реЗ рд╕рдВрдкреВрд░реНрдг рднрд╛рд╡реЛрдВ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рд╡реИрд╢реНрд╡реАрдХрд░рдг рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдЬрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рдбреЛрдореЗрди рд╡реИрдХреНрдЯрд░ рд╣реИ); рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдбреЛрдореЗрди (#5840) рдореЗрдВ рдЙрдард╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдбреЛрдореЗрди рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдкреНрд░реЗрд╖рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рд╢реВрд░-рдкреИрд░рд▓реЗрдЯ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк sqrtm рдЬреИрд╕реЗ рдХреБрдЫ рдЖрд╕рд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдФрд░ рдЪрддреБрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ *m рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - expm , logm , sqrtm , ...)

рдХреНрдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ @unroll рдореИрдХреНрд░реЛ рд╣реИ?

рдмреЗрд╕.рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
@nexpr 4 d->(y[i+d] = exp(x[i+d])

(рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рддреЛ http://docs.julialang.org/en/latest/devdocs/cartesian/ рджреЗрдЦреЗрдВред)

@jiahao рдЗрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдирд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреБрдиреМрддреА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЗрд╕реЗ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛? рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡реЗрдХреНрдЯрд░/рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ exp рддрддреНрд╡-рд╡рд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдШрд╛рддреАрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреИрд╕реЗ рджреЗрдЧрд╛?

@timholy : рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, @nexprs (рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рдЕрдиреЛрд▓рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдЕрдм рд╡реЗрдХреНрдЯрд░рдХреГрдд рдирд╣реАрдВ рд╣реИред (рдпрд╣ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.3 рд╣реИ, рд╢рд╛рдпрдж рдПрд▓рдПрд▓рд╡реАрдПрдо 3.5 рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред)

рдкреБрди: рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд, рдЬреВрд▓рд┐рдпрд╛-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ @toivoh рдХреА рдкреЛрд╕реНрдЯ рднреА рджреЗрдЦреЗрдВред рдпрд╣ #6271 рдПрдХ рд╢реЙрдЯ рджреЗрдиреЗ рд▓рд╛рдпрдХ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@nalimilan рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдХреЗрд▓рд░-> рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓рд┐рдлреНрдЯрд┐рдВрдЧ рдПрдХ matrixfunc рдлрд╝рдВрдХреНрд╢рди (рдХрд╣реЗрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдмрдирд╛рдирд╛) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

X = randn(10,10)
c = 0.7
lift(x->exp(c*x^2)*sin(x), X)

рдЬреЛ рддрдм рд╣реЛрдЧрд╛

  1. X рдкреНрд░рдХрд╛рд░ Matrix{Float64} рд╕реЗ рд▓рд┐рдлреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдФрд░ рд▓рдХреНрд╖реНрдп рдбреЛрдореЗрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ рдФрд░ рддрддреНрд╡ (рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░) Float64 (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ Float64 => Matrix{Float64} рд▓рд┐рдлреНрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ) , рдлрд┐рд░
  2. matrixfunc(x->exp(c*x^2)*sin(x), X) рдХреЗ рдмрд░рд╛рдмрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП expm(c*X^2)*sinm(X) рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред

рдХреБрдЫ рдЕрдиреНрдп рдХреЛрдб рдореЗрдВ X рдПрдХ Vector{Int} рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╣рд┐рдд рднрд╛рд░реЛрддреНрддреЛрд▓рди Int рд╕реЗ Vector{Int} рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ lift(x->exp(c*x^2)*sin(x), X) рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ map(x->exp(c*x^2)*sin(x), X) рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рднреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдФрд░ рд▓рдХреНрд╖реНрдп рдбреЛрдореЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП lift(Number=>Matrix, x->exp(c*x^2)*sin(x), X) ред

@nalimilan рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЬ рдХреА рдХрдВрдкрд╛рдЗрд▓рд░ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдЗрдирд▓рд╛рдЗрди рд╣реЛрдиреЗ рдкрд░ рд╣реА рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреАрдЬреЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ - рдпрджрд┐ рдЗрд╕реЗ "рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ" рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕реЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд▓реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред

@eschnett : рдХреНрдпрд╛ рдЖрдк рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд╕рдорд╛рди рдЕрд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рдордб рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдореИрдВ @nalimilan рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред

рд╕рд╣реАред рдпрд╣рд╛рдБ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреА рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред рдПрдХ рд╕реМрджрд╛
рддрдВрдЧ рдЖрдВрддрд░рд┐рдХ рдЫреЛрд░реЛрдВ (рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг) рдХреЗ рд▓рд┐рдП SIMD рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдеред рдореБрдЦреНрдп
рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рд╡рд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ" рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕/рд╢рдмреНрджрд╛рд░реНрде рд╣реИ
рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдПрдХрд▓ (рдпрд╛ рдмрд╣реБ) рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗред

рдордВрдЧрд▓рд╡рд╛рд░, 4 рдирд╡рдВрдмрд░, 2014 рдХреЛ рд╢рд╛рдо 7:04 рдмрдЬреЗ, рдЬреЙрди рдорд╛рдЗрд▓реНрд╕ рд╡реНрд╣рд╛рдЗрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@eschnett https://github.com/eschnett : рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╣реА рдЕрд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рджреВрд╕рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк SIMD рд╡рдЧреИрд░рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ, рдЬреЛ
рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ @nalimilan https://github.com/nalimilan to
рдЕрд░реНрдеред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/8450#issuecomment -61738237ред

рдЕрдиреНрдп . рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдорд░реВрдкрддрд╛ рдореЗрдВ, рдХреНрдпрд╛ f.(x) рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ nd рдЗрдХрд╛рдИ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рднреМрддрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред)

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдзрд╛рд░рдгрд╛ рд╕рд╛рдордиреЗ рдЖрдИ рдХрд┐ map(log, x) рдХреЗ рдмрд░рд╛рдмрд░ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдзреАрдорд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬреА рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ map (рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдпрд╛ рд▓реВрдк рд▓рд┐рдЦрдирд╛ рд╢рдмреНрджрд╛рд░реНрде рд╕реНрддрд░ рдкрд░ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡реЗрдХреНрдЯрд░-рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдХрд┐рд╕реА рд╕рд░рдгреА рдкрд░ рд▓реВрдк рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореБрджреНрджреЛрдВ рдХреЗ рджреЛ рд╕реНрддрд░ рд╣реИрдВ: (1) рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде, (2) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдореБрджреНрджрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрд╡-рд╡рд╛рд░/рдкреНрд░рд╕рд╛рд░рдг рддрд░реАрдХреЗ рд╕реЗ рдХреБрдЫ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЬреВрд▓рд┐рдпрд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реВрдк рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ (рдХрднреА-рдХрднреА рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ)ред рдХреЛрдИ рднреА рд░рд╛рд╕реНрддрд╛ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред рдЬрдмрдХрд┐ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдХреЛ exp(0.5 * (x - y).^2) рдЬреИрд╕реЗ рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: (1) рдпрд╣ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдХреНрд╕рд░ рдкрд░рд┐рдгрд╛рдореА рдбреЗрд╡рд▓рдкрд░ рдкрдХреНрд╖ рдкрд░ рдЕрдВрддрд╣реАрди рдмрд╣рд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдкрд░ рднреНрд░рдо рдореЗрдВ (рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрдЯрд░ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ)ред (2) рдпрд╣ рдХрд╛рд░реНрдп рд╕реАрдорд╛рдУрдВ рдХреЗ рдкрд╛рд░ рд▓реВрдкреЛрдВ рдХреЛ рдлреНрдпреВрдЬ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдФрд░ рд╢рд╛рдпрдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдорд╣реАрдиреЛрдВ/рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рд╕рдВрдХрд▓рдХ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рджреЗрдЦрдирд╛, рд╕рдВрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдкрде рддреИрдпрд╛рд░ рдХрд░рдирд╛ред

map рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ (1) рдпрд╣рд╛рдВ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (2) - рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╛ рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп map , рд╣рдореЗрд╢рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд▓реВрдкреНрд╕ рдХреЗ рдлрд╝реНрдпреВрдЬрд╝рд┐рдВрдЧ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдЧрдгрдирд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореИрдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рднреА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЕрдм map(exp, 0.5 * map(abs2, x - y)) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ, рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдкрд┐рдВрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╢рд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП $-рдиреЛрдЯреЗрд╢рди рд▓реЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рднрд╛рд╡ рдЕрдм exp $(0.5 * abs2$(x - y)) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореВрд▓ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ - рдореИрдкрд┐рдВрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдореЗрдВ $ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕рдВрдХреЗрддрди рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рдХ рдлрд╝рдВрдХреНрд╢рди рд╕реАрдорд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдФрд░ рдлрд╝реНрдпреВрдЬреНрдб рд▓реВрдк рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЙрд╕реЗ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЖрдзреБрдирд┐рдХ рд╕реАрдкреАрдпреВ рдХреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рдо рдХреА рдХреНрд╖рдорддрд╛, рдХрдИ рд▓реВрдкреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рдирд╛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдЧрдгрдирд╛ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрджрдо рд╣реИред рдпрд╣ рдЪрд░рдг рд╕реНрд╡рдпрдВ SIMD рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ @simd рдореИрдХреНрд░реЛ рд╣реИред рд╕рдВрдХрд▓рдХ рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рдЙрддреНрдкрд╛рджрд┐рдд рд▓реВрдк рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдлрд╛рдпрджреЗрдордВрдж рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ $ -рдиреЛрдЯреЗрд╢рди (рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡) рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рд▓реВрдк рдХреЛ рдлреНрдпреВрдЬ рдХрд░рдиреЗ рдФрд░ рд╕рд┐рдо рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреЛрдб рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╣реИрдВред

@lindahua рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдПрдХ рдЕрдЪреНрдЫрд╛ IMHO рд╣реИред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рдЬреВрд▓рд┐рдпрд╛ рдПрдХ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА рдкреНрд░рдгрд╛рд▓реА рдХреА рд╣рдХрджрд╛рд░ рд╣реИ рдЬреЛ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд▓реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрд╢рд▓ рдмрдирд╛рддреА рд╣реИред

  • рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдПрдХрд▓ рд▓реВрдк рдореЗрдВ рдлрд╝реНрдпреВрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдкреИрдЯрд░реНрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ A .* B .+ C рджреЛ рдЕрд╕реНрдерд╛рдпреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рди рд▓реЗ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХред
  • рддрддреНрд╡-рд╡рд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрдЯреМрддреА рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж рдлреНрд▓рд╛рдИ рдкрд░ рдХрдореА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЖрдо рддреМрд░ рдкрд░, рдпрд╣ sumabs2(A) рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЗрд╕реЗ sum(abs$(A)$^2) (рдпрд╛ sum(abs.(A).^2) ) рдЬреИрд╕реЗ рдорд╛рдирдХ рдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдЧрд╛ред
  • рдЕрдВрдд рдореЗрдВ, рдЧреИрд░-рдорд╛рдирдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреИрдЯрд░реНрди рдХреЛ рдЧреИрд░-рдорд╛рдирдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП A .* B рдХреЛ рдХреЗрд╡рд▓ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдФрд░ рдПрдХ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдХрд┐рд╕реА рддрддреНрд╡-рд╡рд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ Set , a Dict , рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Range рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рджреЛ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рддрддреНрд╡-рд╡рд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ AbstractArray рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдХрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рди рд▓реЗрдВ рдХрд┐ LazyArray , рдЬреЛ рдордХреНрдЦреА рдкрд░ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ ( Transpose рдХреЗ рд╕рдорд╛рди) https://github.com/JuliaLang/julia/issues/4774#issuecomment-59422003) рд╕реЗ рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд▓реЗрдХрд┐рди 1 рд╕реЗ length(A) рддрдХ рд░реИрдЦрд┐рдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рднреЛрд▓реЗрдкрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрдЯрд░реЗрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреБрдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрдВрдХреНрддрд┐-рд╡рд╛рд░ рдпрд╛ рд╕реНрддрдВрдн-рд╡рд╛рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢реВрдиреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдореВрд▓ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, cfред https://github.com/JuliaLang/julia/issues/7010, https://githubред рдХреЙрдо/рдЬреВрд▓рд┐рдпрд╛рд▓реИрдВрдЧ/рдЬреВрд▓рд┐рдпрд╛/рдореБрджреНрджреЛрдВ/7157)ред

рдЬрдм рдХреЛрдИ рдХрдореА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдФрд░ рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреЗрд╡рд▓ LazyArray ( collect рдХреЗ рдмрд░рд╛рдмрд░, рд▓реЗрдХрд┐рди рдореВрд▓ рд╕рд░рдгреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддреЗ рд╣реБрдП) рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдХреЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред ) рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрдЯрд░реЗрдЯрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ getindex рдкрд░ LazyArray рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкрд░ setindex! рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реИрдЦрд┐рдХ рдпрд╛ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ)ред

рдЬрдм рдПрдХ рдХрдореА рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ LazyArray рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рдореЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддрд░реНрдХ рдкрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рднрд░реЗрдВ ( reduce рдХреЗ рдмрд░рд╛рдмрд░ рд▓реЗрдХрд┐рди рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо рдЗрдЯрд░реЗрдЯрд░ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП)ред рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рд▓реМрдЯрд╛рдПрдЧрд╛; рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдпрд╛рдореЛрдВ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред

рдпрд╣ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛рдлреА рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдЗрди-рдкреНрд▓реЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░реЗрдЧреАред

рдореИрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдкрд░ рдереЛрдбрд╝рд╛ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .= рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ред
рддреЛ @nalimilan рдХрд╛ рдЙрджрд╛рд╣рд░рдг sum(abs.(A).^2)) рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛:

A = [1,2,3,4]
a .= abs(A)^2
result = sum(a)

рдпрд╣ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рддрддреНрд╡ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ (рдпрд╛ рдПрдХрд╛рдзрд┐рдХ) рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд░рдгреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмреЗрд╢рдХ, рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рднреА рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ map((x) -> abs(x)^2, A) рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, .() рдХреЗ рд╕рд╛рде рдореИрдк рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди .sin(x) рдФрд░ .(x + sin(x)) рдлрд┐рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ рдпрд╛ . рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдореИрдк рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рддрдм @nalimilan рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬреИрд╕реЗ рдХрдЯреМрддреА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрд╣рд╛рдВ sum(.(abs(A)^2)) рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрди рджреЛрдиреЛрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ . рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ $ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддреАрдХ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдореИрдк рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдореИрдк рдСрдкрд░реЗрдЯрд░ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдП LazyArray рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ: https://gist.github.com/nalimilan/e737bc8b3b10288abdad

рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЗрд╕ рдкреНрд░рдорд╛рдг рдореЗрдВ рдХреЛрдИ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди (a ./ 2).^2 рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╕рд╛рд░ рдореЗрдВ LazyArray(LazyArray(a, /, (2,)), ^, (2,)) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рд╕реНрдЯрдо рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд▓реВрдк рдХреЗ рд╕рд╛рде рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рдЕрдкреЗрдХреНрд╖рд┐рдд) рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рд▓рд╛рдЗрди 12 рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИ (рд▓рдЧрднрдЧ рд╕рднреА рдЖрд╡рдВрдЯрди рд╡рд╣рд╛рдВ рд╣реЛрддреЗ рд╣реИрдВ), рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рдЬрд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ LazyArray рдХреЛ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдХреЗрд▓реЗ рддрд░реНрдХреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рдиреЗ рджреЗрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

LazyArray рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

@nalimilan рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЖрд▓рд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдореЗрд░рд┐рдХрдлрди рдореЗрдВ рдордЬрд╝реЗрджрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдореИрдВрдиреЗ рдХрдИ рддрд░рд╣ рдХреЗ рд╣рдердХрдВрдбреЗ рдЖрдЬрдорд╛рдП, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдВрддрд░ рдХреЛ рдкрд╛рдЯрдиреЗ рдХрд╛ рдХреЛрдИ рд╕реМрднрд╛рдЧреНрдп рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЛ рдЖрдХреНрд░рд╛рдордХ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк @inline рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

@lindahua @inline рд╕рдордп рдкрд░ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ getindex(::LazyArray, ...) рдХрд┐рд╕реА рджрд┐рдП рдЧрдП LazyArray рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд╣рд╛ рдЬрд╛рдирд╛ред рдореБрдЭреЗ LazyArray{T1, N, T2, F} рдХреА рддрд░рд╣ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП, F рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ getindex рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЙрд▓ рдЬреНрдЮрд╛рдд рд╣реЛред рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рд╕рдордп рдПрдХ рдЧреИрд░-рдЗрдирд▓рд╛рдЗрди рдХреЙрд▓ рд╕реЗ рднреА рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИред

рдЖрдк NumericFuns рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ F рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

Dahua

рдореБрдЭреЗ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд┐рддрд░рд┐рдд рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирддрд╛ рд╣реВрдВ
рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдЬрд╣рд╛рдВ рдореИрдВ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реВрдВ (рдФрд░
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░) рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЦреБрдж рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рдЪреАрдЬрд╝ рд▓рд╛рдЧреВ рдХреА рд╣реИ, рдФрд░
рдЬрд┐рд╕реЗ рдЖрдк "рдлрд╝рдВрдХреНрдЯрд░реНрд╕" рдХрд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред (рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ
рдирд╛рдо "рдордЬрд╝реЗрджрд╛рд░", рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдФрд░ рд╣реЛрддреЗ рд╣реИрдВ <
http://en.wikipedia.org/wiki/Functor>, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реА ++ рдиреЗ рдкрд╛рдиреА рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛
рдпрд╣рд╛рдВред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдлрд╝рдирдХреНрдЯрд░ рднрд╛рдЧ рдХреЛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ
рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпред

-рдПрд░рд┐рдХреЛ

рдЧреБрд░реБ, 20 рдирд╡рдВрдмрд░, 2014 рдХреЛ рд╕реБрдмрд╣ 10:35 рдмрдЬреЗ, рджрд╣реБрдЖ рд▓рд┐рди рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдЖрдк рдиреНрдпреВрдореЗрд░рд┐рдХрдлрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдл рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/8450#issuecomment -63826019ред

рдПрд░рд┐рдХ рд╢реНрдиреЗрдЯрд░ [email protected]
http://www.perimeterinstitute.ca/personal/eschnetter/

@ рд▓рд┐рдВрдбрд╣реБрдЖ рдореИрдВрдиреЗ рдлрд╝реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ:
https://gist.github.com/nalimilan/d345e1c080984ed4c89a

With functions:
# elapsed time: 3.235718017 seconds (1192272000 bytes allocated, 32.20% gc time)

With functors:
# elapsed time: 0.220926698 seconds (80406656 bytes allocated, 26.89% gc time)

Loop:
# elapsed time: 0.07613788 seconds (80187556 bytes allocated, 45.31% gc time) 

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдЕрднреА рддрдХ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЖрдВрдЦреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдореЗрдВ Pow рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдпрд╛ LazyArray рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдВрд▓рдпрди рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╣реА рдШрдЯрдирд╛ рдЬреИрд╕реЗ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╛ рддреЛ 100x100 рдпрд╛ 1000x1000 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде, рд╕рдВрднрд╡рддрдГ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╛рд╣рд░реА рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

# With sqrt()
julia> test_lazy!(newa, a);
julia> <strong i="8">@time</strong> for i in 1:1000 test_lazy!(newa, a) end
elapsed time: 0.151761874 seconds (232000 bytes allocated)

julia> test_loop_dense!(newa, a);
julia> <strong i="9">@time</strong> for i in 1:1000 test_loop_dense!(newa, a) end
elapsed time: 0.121304952 seconds (0 bytes allocated)

# With exp()
julia> test_lazy!(newa, a);
julia> <strong i="10">@time</strong> for i in 1:1000 test_lazy!(newa, a) end
elapsed time: 0.289050295 seconds (232000 bytes allocated)

julia> test_loop_dense!(newa, a);
julia> <strong i="11">@time</strong> for i in 1:1000 test_loop_dense!(newa, a) end
elapsed time: 0.191016958 seconds (0 bytes allocated)

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ LazyArray рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рд░рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛рдлреА рд▓рдВрдмреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, x/2 + 3 рдХреЗ рд▓рд┐рдП:

julia> a1 = LazyArray(a, Divide(), (2.0,));

julia> a2 = LazyArray(a1,  Add(), (3.0,));

julia> <strong i="17">@code_native</strong> a2[1]
    .text
Filename: none
Source line: 1
    push    RBP
    mov RBP, RSP
Source line: 1
    mov RAX, QWORD PTR [RDI + 8]
    mov RCX, QWORD PTR [RAX + 8]
    lea RDX, QWORD PTR [RSI - 1]
    cmp RDX, QWORD PTR [RCX + 16]
    jae L64
    mov RCX, QWORD PTR [RCX + 8]
    movsd   XMM0, QWORD PTR [RCX + 8*RSI - 8]
    mov RAX, QWORD PTR [RAX + 24]
    mov RAX, QWORD PTR [RAX + 16]
    divsd   XMM0, QWORD PTR [RAX + 8]
    mov RAX, QWORD PTR [RDI + 24]
    mov RAX, QWORD PTR [RAX + 16]
    addsd   XMM0, QWORD PTR [RAX + 8]
    pop RBP
    ret
L64:    movabs  RAX, jl_bounds_exception
    mov RDI, QWORD PTR [RAX]
    movabs  RAX, jl_throw_with_superfluous_argument
    mov ESI, 1
    call    RAX

рд╕рдордХрдХреНрд╖ рдХреЗ рд╡рд┐рдкрд░реАрдд:

julia> fun(x) = x/2.0 + 3.0
fun (generic function with 1 method)

julia> <strong i="21">@code_native</strong> fun(a1[1])
    .text
Filename: none
Source line: 1
    push    RBP
    mov RBP, RSP
    movabs  RAX, 139856006157040
Source line: 1
    mulsd   XMM0, QWORD PTR [RAX]
    movabs  RAX, 139856006157048
    addsd   XMM0, QWORD PTR [RAX]
    pop RBP
    ret

jae L64 рддрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╕рд░рдгреА рд╕реАрдорд╛ рдЬрд╛рдВрдЪ рд╣реИред @inbounds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ (рдпрджрд┐ рдЙрдкрдпреБрдХреНрдд рд╣реЛ)ред

рдиреАрдЪреЗ рдХрд╛ рднрд╛рдЧ, рдЬрд╣рд╛рдБ рджреЛ рдХреНрд░рдорд╛рдЧрдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ mov RAX, ... рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рдПрдХ рджреЛрд╣рд░рд╛ рд╕рдВрдХреЗрдд рд╣реИ, рдпрд╛рдиреА рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ (рдпрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА, рдпрд╛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░, рдЖрджрд┐) рддрдХ рдкрд╣реБрдБрдЪрдирд╛ред рдЗрд╕реЗ LazyArray рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ - рд╢рд╛рдпрдж рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛) рдпрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдХреЛрдб рдЕрднреА рднреА рдХрд╛рдлреА рддреЗрдЬ рд╣реИред рдЗрд╕реЗ рдФрд░ рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реБрдП, рдХреЙрд▓рд░ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд▓реВрдк рд╕реЗ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛: рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЖрд░рдИрдкреАрдПрд▓ рд╕реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ?

рдпрд╣ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рднрд╛рдЬрди рдЬрдмрдХрд┐ рджреВрд╕рд░реЗ рдиреЗ x/2 рдХреЛ рдЧреБрдгрд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@eschnett LazyArray рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдФрд░ рдореИрдВ рд▓реВрдк рдореЗрдВ @inbounds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред https://gist.github.com/nalimilan/d345e1c080984ed4c89a рдкрд░ рд╕рд╛рд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рд▓реВрдк рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ:

function test_lazy!(newa, a)
    a1 = LazyArray(a, Divide(), (2.0,))
    a2 = LazyArray(a1, Add(), (3.0,))
    collect!(newa, a2)
    newa
end
<strong i="11">@code_native</strong> test_lazy!(newa, a); 

рддреЛ рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ, @inline рдХреЛ getindex рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рдордп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

@toivoh рдХреНрдпрд╛ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ?

рдореИрдВрдиреЗ рджреЛ-рддрд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг (рдЬрд┐рд╕реЗ LazyArray2 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рд╣реИред x .+ y рдЬреИрд╕реЗ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди .+ $ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ LazyArray2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ (рдпреЗ 1000 рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╣реИрдВ) , рджреЗрдЦреЗрдВ https://gist.github.com/nalimilan/d345e1c080984ed4c89a):

# With LazyArray2, filling existing array
elapsed time: 0.028212517 seconds (56000 bytes allocated)

# With explicit loop, filling existing array
elapsed time: 0.013500379 seconds (0 bytes allocated)

# With LazyArray2, allocating a new array before filling it
elapsed time: 0.098324278 seconds (80104000 bytes allocated, 74.16% gc time)

# Using .+ (thus allocating a new array)
elapsed time: 0.078337337 seconds (80712000 bytes allocated, 52.46% gc time)

рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рдгрдиреАрддрд┐ .+ , .* , рдЖрджрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рд╕рд╣рд┐рдд рд╕рднреА рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИред

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдЕрдВрддрд░реЛрдВ рдХреЗ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛, рдпрд╛рдиреА sum((x .- y).^2, 1) (рдлрд┐рд░ рд╕реЗ рд╕рд╛рд░ рджреЗрдЦреЗрдВ):

# With LazyArray2 and LazyArray (no array allocated except the result)
elapsed time: 0.022895754 seconds (1272000 bytes allocated)

# With explicit loop (no array allocated except the result)
elapsed time: 0.020376307 seconds (896000 bytes allocated)

# With element-wise operators (temporary copies allocated)
elapsed time: 0.331359085 seconds (160872000 bytes allocated, 50.20% gc time)

@nalimilan
LazyArrays рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднрд╛рдк рд╕рдВрд▓рдпрди рд╣рд╛рд╕реНрдХреЗрд▓ [1, 2] рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рдорд╛рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВ?

[1] http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.104.7401
[2] http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.421.8551

@vchuravy рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рдо рдореБрджреНрджреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ (рдЬрд┐рдиреНрд╣реЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдмрд╛рдж рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореИрдВ рдЗрди рдкреЗрдкрд░реНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред

@nalimilan рдореИрдВ рднрд╛рд╡рдирд╛ рдЬрд╛рдирддрд╛ рд╣реВрдБред рдореБрдЭреЗ рджреВрд╕рд░рд╛ рдкреЗрдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕реНрдЯреНрд░реАрдо рдлрд╝реНрдпреВрдЬрд╝рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реИрдХреНрдЯрд░ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЧрдгрдирд╛ рдореЙрдбрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд▓рд╕реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ map рдФрд░ reduce рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдЬреЛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ (рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рд╕реЗ рднреА рддреЗрдЬрд╝) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ func{x} рдмрди рдЧрдпрд╛? рд╢рд╛рдпрдж рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рд╣реА рдлрд╛рд▓рддреВ?

рддреЗрдЬреА рд╕реЗ рд╡реЗрдХреНрдЯрд░рд┐рдВрдЧ (рд╕рд┐рдо рдХреЗ рдЕрд░реНрде рдореЗрдВ) рдХреЗ рд╡рд┐рд╖рдп рдкрд░, рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдИрдЬрд┐рди рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣рд╛рдВ рд╕рднреА рдореМрдЬреВрджрд╛ рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ LazyArray рдФрд░ LazyArray2 рдХрд╣рд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо NumericFuns.jl рдХреЗ рдлрдВрдХреНрд╢рдВрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкрд╡рд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

1) рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ f.(x) рдпрд╛ f$(x) рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА LazyArray рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ f() рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ x ред

2) рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░реЗрдВ рдХрд┐ broadcast рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП f.(x, y, ...) рдпрд╛ f$(x, y, ...) LazyArray #$ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x рдХреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдЖрдпрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ y , ... рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдХрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдкрд░ рд╕рдВрдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рдордХреНрдЦреА рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

3) .+ , .- , .* , ./ , .^ , рдЖрджрд┐ рдмрдирд╛рдПрдВред LazyArray рдХреЗ рдмрдЬрд╛рдп broadcast #$18$#$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

4) рдПрдХ рдирдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ .= рдпрд╛ $= рдЬреЛ (рдХреЙрд▓рд┐рдВрдЧ collect ) рдПрдХ LazyArray рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ (рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛) рдкреНрд░рдЪрд╛рд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдирдкреБрдЯ, рдФрд░ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред

5) рд╢рд╛рдпрдж broadcast рдХреЛ LazyArray рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рддрддреНрдХрд╛рд▓ collect рдЖрдпрди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓реЗрдВред

рдкреНрд╡рд╛рдЗрдВрдЯ 4 рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХрднреА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгреА рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛, рд╣рдореЗрд╢рд╛ LazyArray s, рддрд╛рдХрд┐ рдХрдИ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдХреЛрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рдЖрд╡рдВрдЯрди рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░ sum рдЬреИрд╕реА рдХреЙрд▓рд┐рдВрдЧ рдХрдЯреМрддреА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддреЛ рдШрдиреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рд╡ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдФрд░ рдХреБрд╢рд▓ рд╣реЛрдВрдЧреЗ:

y .= sqrt.(x .+ 2)
y .=  тИЪ╧А exp.(-x .^ 2) .* sin.(k .* x) .+ im * log.(x .- 1)
sum((x .- y).^2, 1)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╣рд▓реНрдХреА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╕рд░рдгреА рджреГрд╢реНрдпреЛрдВ рдХреА рдирдИ рддрд╕реНрд╡реАрд░ рдФрд░ Transpose / CTranspose рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЖрдк рдПрдХ рдШрдиреЗ рдФрд░ рдкрдардиреАрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЬрдЯрд┐рд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ copy рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдкрдХреЛ "рдЫрджреНрдо-рд╕рд░рдгреА" рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгреА рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рддрддреНрд╡-рд╡рд╛рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЫреЛрдЯрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдореИрдЯрд▓реИрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЦрд░рд╛рдм рд╣реИред рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рд╣реА, рдЬреВрд▓рд┐рдпрд╛-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдереЗ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рджреВрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ:
https://groups.google.com/d/msg/julia-users/t0KvvESb9fA/6_ZAp2ujLpMJ
https://groups.google.com/d/msg/julia-users/DL8ZsK6vLjw/w19Zf1lVmHMJ
https://groups.google.com/d/msg/julia-users/YGmDUZGOGgo/LmsorgEfXHgJ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдЖрд▓рд╕реНрдп рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджреВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдЖ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдмрд╕ _рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдмрд┐рдВрджреБ_ рд╣реИрдВред рдордзреНрдп рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:

x .|> x->exp(-x ^ 2) * sin(k * x) + im * log(x - 1)

рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдПрдХ рдХреБрд╢рд▓ map ( .|> ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддреБрд▓рдирд╛ рд╣реИ:

y .=  тИЪ╧А exp.(-x .^ 2) .* sin.(k .* x) .+ im * log.(x .- 1)
y =  [тИЪ╧А exp(-x[i]^ 2) .* sin(k * x[i]) .+ im * log(x[i] - 1) for i = 1:length(x)]

рдпрджрд┐ рдЖрдк for ... рднрд╛рдЧ рдХреЛ рдЫреВрдЯ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдордЭ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдг рд▓рдВрдмреА рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдордЭ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдЧрд╛ред

рдПрдХ 1d рд╕рдордЭ рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ for i in eachindex(x) рд╣реИ рдЬреЛ рдмрджрд▓ рднреА рд╕рдХрддрд╛ рд╣реИред

рд╕рдордЭ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ DataArrays рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕рдореВрд╣ рдХреЛ рджреЗрдЦрдирд╛ рд╕рд╛рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ LazyArray рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ LINQ рд╢реИрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рдореМрдЬреВрдж рддрддреНрд╡реЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡реГрдХреНрд╖ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡реГрдХреНрд╖ рдХрд╛ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ . рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдХрд░реАрдм рд╣реИ?

рдиреЗрдЯ рдкрд░ рд╡реЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рджреВрд░ рдЪрд▓реЗ рдЧрдП: рдЖрдк рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдХрдИ рд╕реАрдкреАрдпреВ (.AsParallel () рдЬреЛрдбрд╝рдХрд░) рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбреНрд░рд╛рдпрдбрд▓рд┐рдирдХреНрдпреВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ http: / рдкрд░ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реЗрдЬрд╝ рднреА рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╛рдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯреЗрд╢рдВрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдирд┐рд╖реНрдкрд╛рджрди рдЗрдВрдЬрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреВрд░реЗ рдореБрджреНрджреЗ рдХреЛ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрдИ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдХреБрд╢рд▓ SIMD рдЬреИрд╕реЗ рдХреЛрдб рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ GPU рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЧрдгрдирд╛ рдЖрджрд┐

рд╣рд╛рдВ, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд▓рдВрдмреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд┐рдВрджреБ рд╣реИрдВред рд▓реЗрдХрд┐рди рджреЛ рдЫреЛрдЯреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореИрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЖрд▓рд╕реНрдп рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рд╣рдореЗрд╢рд╛ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ!

рдХреЛрдИ рднреА рдХреЙрдореНрдкреНрд░рд┐рд╣реЗрдВрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ y = [sqrt(x + 2) over x] ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @johnmyleswhite рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ DataArrays рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕реНрдкреИрд╕ рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рдХрд┐рд╕реА рднреА рдирдП рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
1) y[:] = sqrt.(x .+ 2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрди-рдореБрдХреНрдд рдЗрди-рдкреНрд▓реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
2) sum((x .- y).^2, 1) рдЬреИрд╕реА рдЖрд╡рдВрдЯрди-рдореБрдХреНрдд рдХрдЯреМрддреА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред

рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореБрджреНрджреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛)?

@davidanthoff рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕реЗ рдЕрднреА рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LazyArray рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╢рд╛рдпрдж рдЗрд╕реЗ рдЬреЗрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╡реЗ рднреА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд▓рд╕реА рд╕рд░рдгреА рд╣реИрдВред рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ [f(x) over x] рдХреЙрдореНрдкреНрд░рд┐рд╣реЗрдВрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реА рдирд╛рдо рдХрд╛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдФрд░ рд╕рд░рдгреА рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред рдпрджрд┐ рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧреА (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЦреЗрд▓рд╛ рдерд╛ ), рддреЛ рдЗрди рдирдП рдУрд╡рд░-рдПрдХреНрд╕-рд╢реИрд▓реА-рд╕рдордЭ рдХреЛ рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рддреБрд░рдВрдд рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ LazyArray рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

@mbauman рд╣рд╛рдВ, рдЬреЗрдирд░реЗрдЯрд░ рдФрд░ рдЖрд▓рд╕реА рд╕рд░рдгреА рдХрдИ рдЧреБрдг рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬреЗрдирд░реЗрдЯрд░/рдЖрд▓рд╕реА рд╕рд░рдгреА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░, рдФрд░ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╢рд╛рдВрдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рддреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреЛрдИ 1 рджреЛрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛) y[:] = sqrt(x + 2) over x рдФрд░ sum((x - y)^2 over (x, y), 1) (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдЗрдП over рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ рд╕рддреНрд░ рдФрд░ рдкрд╣рд▓реЗ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ)ред

рдореБрдЭреЗ f(x) over x рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рд╣рдо рдХрд┐рд╕реА рдирдП рдХреАрд╡рд░реНрдб рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП f(x) for x рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ [f(x) for x=x] рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ map рдХреЗ рдмрд░рд╛рдмрд░ рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рд╡реЗ рдЧреИрд░-рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред Array рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рднреА over рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ $# over for рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрд╛рдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: [f(x, y) for x=x, y=y] рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдкрд░рд┐рдгрд╛рдоред рдорд╛рдирдЪрд┐рддреНрд░ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдЕрднреА рднреА рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛рдиреА [f(x, y) over x, y] [f(x, y) for (x,y) = zip(x, y)]] рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдореБрдЭреЗ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреАрд╡рд░реНрдб over рдкреЗрд╢ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдиреЗ рдЙрдард╛рдпрд╛ рд╣реИ, рдХрдИ рд╡реИрдХреНрдЯрд░реЛрдВ рдкрд░ map рдЖрдИрдПрдирдЬреА рдмрд╣реБрдд рдЖрдо рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрд░реЗ, рдореИрдВрдиреЗ рдЬреЗрдл рдХреЛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛! ;-)

рдпрд╣ #4470 рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрднреА рдХреЗ рд▓рд┐рдП 0.4-рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдореИрдкрд┐рдВрдЧ-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ DataArrays, рди рдХреЗрд╡рд▓ рдореВрд▓ рд╕рд░рдгрд┐рдпрд╛рдБ;
  • рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд┐рдд рд▓реВрдк рдЬрд┐рддрдирд╛ рддреЗрдЬрд╝ рд╣реИред

рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ред

рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛: рдЕрдиреБрдорд╛рдирд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдпрджрд┐ рд╣рдо рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ DataArray рд╣реИ, рддреЛ рд╣рдо DataArrays рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдореИрдк-рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ SomeKindOfStream рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдЯреНрд░реАрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднреЗрдЬреЗ рдЧрдП рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЛ рдРрд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрднреА рд╣реЛрдЧреА рдЬрдм рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрд╢рд▓ рдирд┐рд╖реНрдкрд╛рджрди рдЪрд╛рд╣рддрд╛ рд╣реЛред

рдЕрдЧрд░ рдореИрдВ рдЬреЛ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ [EXPR for i in collection if COND] рдХрд╛ рдЕрдиреБрд╡рд╛рдж eval(collection_mapfilter_macro(:(i), :(EXPR), :(COND))) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ collection_mapfilter_macro рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд╣реАрдВ, рд╣рдо рдРрд╕реА рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗред рдпрджрд┐ DataArray map (рдпрд╛ рд╕рдордХрдХреНрд╖) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╣рдореЗрд╢рд╛ DataArrays рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рдЬреЛ рднреА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпрд╣ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдпрджрд┐ x рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ рдЕрднреА рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ sin(x) рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред

1) y[:] = sqrt.(x .+ 2) . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рдВрдЯрди-рдореБрдХреНрдд рдЗрди-рдкреНрд▓реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
2) sum((x .- y).^2, 1) рдЬреИрд╕реА рдЖрд╡рдВрдЯрди-рдореБрдХреНрдд рдХрдЯреМрддреА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

y = рдХреНрд╕реНрдк(-x^2) * sin(k*x) + im * log(x-1)

рджреВрд╕рд░реЛрдВ рд╕реЗ рдЗрди рддреАрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ for рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛:
1) y[:] = [ sqrt(x + 2) for x ])
2) sum([ (x-y)^2 for x,y ], 1)
рддрдерд╛
y = [ тИЪ╧А exp(-x^2) * sin(k*x) + im * log(x-1) for x,k ]

рдореБрдЭреЗ рдпрд╣ рдХрд╛рдлреА рдкрд╕рдВрдж рд╣реИ! рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдкрдардиреАрдп рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдореВрд▓реА рд╕рд╡рд╛рд▓, рдХреНрдпрд╛ x[:] = [ ... for x ] рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд░рдгреА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрд╛рджреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд▓рд╛рдн рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрдбрд╝реЗ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдордЫрд▓реА рдХреА рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХреЗрддрд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

@Mike43110 рдЖрдкрдХрд╛ x[:] = [ ... for x ] рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ x[:] = (... for x) , RHS рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреНрд░рддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ x рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдКрдкрд░ рдореЗрд░реЗ LazyArray рдкреНрд░рдпреЛрдЧ рдХреЗ рдкреАрдЫреЗ рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛ред

[f <- y] рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП Int[f <- y] рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдЬреЛ рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ f(y[1]) рд╕реЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЪреВрдВрдХрд┐ рдпрд╣ mapslices рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрддрд╛ рд╣реИ, [f <- rows(A)] рдЬрд╣рд╛рдВ rows(A) (рдпрд╛ columns(A) рдпрд╛ slices(A, dims) ) рдПрдХ Slice рджреЗрддрд╛ рд╣реИ

map(f, slice::Slice) = mapslices(f, slice.A, slice.dims)

рдЬрдм рдЖрдк рдЕрдиреБрдХреНрд░рдордг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

f(x[:,j]) .* g(x[i,:])

рдЗрд╕рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕рдордЭ рд╢реИрд▓реА рд╕реЗ рдЭрдЯрдХрд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ:

[f(x[m,j])*g(x[i,n]) for m=1:size(x,1), n=1:size(x,2)]

рдЬрд╣рд╛рдВ, рдорд╛рдорд▓реЛрдВ рдХреЛ рдмрджрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЪрддреБрд░рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХрд┐ рдпрд╣ рдиреЗрд╕реНрдЯреЗрдб рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ over рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ f рдФрд░ g рдереЛрдбрд╝реЗ рдорд╣рдВрдЧреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

[f(x[m,j]) for m=1:size(x,1)] .* [g(x[i,n]) for _=1, n=1:size(x,2)]

рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рд▓рдВрдмрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг "рдбреЙрдЯреНрд╕" рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ f.(x[:,j]) .* g.(x[i,:]) рджреЗ рд╕рдХрддрд╛ рд╣реИред

@JeffBezanson рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЗрд░рд╛рджрд╛ рдХреНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ .* рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ?

рдирд╣реАрдВ; рдореИрдВ рдпрд╣рд╛рдВ f рдФрд░ g рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЗрд╡рд▓ over x рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрдд рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЙрдЯреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░рдгреА рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрд╢рд▓ (AFAICT) рд╣реЛрдЧрд╛ рдФрд░ рдЗрддрдирд╛ рдмрджрд╕реВрд░рдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛:
[ f(y) * g(z) for y in x[:,j], z in x[i,:] ]

рдХреНрдпрд╛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреАрд╡рд░реНрдб рдкрд░ рдиреЗрд╕реНрдЯ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

f(x)*g(y) over x,y

рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ

[f(x)*g(y) for (x,y) = zip(x,y)]

рдЬрдмрдХрд┐

f(x)*g(y) over x over y

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

[f(x)*g(y) for x=x, y=y]

рдлрд┐рд░, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛

f(x[:,n])*g(x[m,:]) over x[:,n] over x[m,:]

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдкреВрд░реНрд╡-рдирд┐рд░реАрдХреНрд╖рдг рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╣реЛрдЧрд╛ред

@JeffBezanson рдХреИрд╕рд╛ рд░рд╣реЗрдЧрд╛?

f(x[:i,n]) * g(x[m,:i]) over i

f.(x[:,n] .* g.(x[m,:]) рдХреЗ рдмрд░рд╛рдмрд░ рджреЗрддрд╛ рд╣реИред рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ x[:i,n] рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ i рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдкрд░ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ x[:,n] ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ (рдкреНрд░рдердо рджреГрд╖реНрдЯрдпрд╛) рди рддреЛ рдмрджрд╕реВрд░рдд рдФрд░ рди рд╣реА рдмреЛрдЭрд┐рд▓, рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реНрд╡рдпрдВ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН 1: рд▓рдВрдмрд╛рдИ (x [:, n])ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХреАрд╡рд░реНрдб рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, "рдУрд╡рд░" рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдЬрдмрдХрд┐ "рдХреЗ рд▓рд┐рдП" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1: рд▓рдВрдмрд╛рдИ (x [:, рдПрди]) рдХреА рдПрдХ рдЙрдкрд╢реНрд░реЗрдгреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ:

f(x[:i,n]) * g(x[m,:i]) for i in 1:length(x[:,n])-1 ред

@ рдбреЗрд╡рд┐рдбрдЧреЛрд▓реНрдб , :i рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреАрдХ i рдХрд╛ рдЕрд░реНрде рд╣реИред

рдЖрд╣ рд╣рд╛рдБ, рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред рдЦреИрд░, рдЬрдм рддрдХ рдбреЙрдЯреНрд╕ рдирд┐рд╖реНрдкрдХреНрд╖ рдЦреЗрд▓ рд╣реИрдВ, рддрдм рддрдХ рдХреНрдпрд╛ рд╣реЛрдЧрд╛

f(x[.i,n]) * g(x[m,.i]) over i

рдЬрд╣рд╛рдВ рдбреЙрдЯ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ i рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ 1:length(x[:,n) рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ, рдпрд╛ рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ "рдбреЙрдЯ рдХреНрд░реАрдк" рд╕реЗ рдПрдХ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдЬреЗрдл рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛:

[ f(g(e^(x[m,.i]))) * p(e^(f(y[.i,n]))) over i ]

рд╡рд┐рд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ

f.(g.(e.^(x[m,:]))) .* p.(e.^(f.(y[:,n])))

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рд╣реИред [рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ over i рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ:

[ f(g(e^(x[m,.i]))) * p(e^(f(y[.i,n]))) ] ]

рдХреЙрдореНрдкреНрд░рд┐рд╣реЗрдВрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреИрдЯрд░реНрди рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкрд╛рд░реНрд╕рд░ рдиреЗ рд╕рдордЭрд╛ рдХрд┐ i x[m, .i] #$ рдореЗрдВ рдЕрдиреБрдХреНрд░рдордг рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓реЛ рд▓рдВрдмрд╛рдИ (x [m,:]) рд╣реИ, рддреЛ рдХреЛрдИ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

[ f(x[.i]) * g(y[.j]) over i, j=-i ]

x рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд┐рдкрд░реАрдд рдХреНрд░рдо рдореЗрдВ y рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рдд x y рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рд╡рд┐рд░реБрджреНрдз, рдЖрджрд┐ рдХреЛрдИ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

[ f(x[.i]) * g(y[.j]) over i, j=i+1 ]

i рд╡реЗрдВ рддрддреНрд╡ рдХреЛ x рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП i+1 рд╡реЗрдВ рддрддреНрд╡ рд╕реЗ y (рдЬрд╣рд╛рдВ x рдХреЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓рдВрдмрд╛рдИ (x) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рдХрд╛рд░рдг y рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛)ред рдФрд░ рдЕрдЧрд░ p::Permutation рдкрд░рдорд┐рдЯ (1, ..., рд▓рдВрдмрд╛рдИ (x)) рдХреЛрдИ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

[ f(x[.i]) * g(y[.j]) over i, j=p(i) ]

x рдХреЗ i рд╡реЗрдВ рддрддреНрд╡ рдХреЛ x y p(i) рд╡реЗрдВ рддрддреНрд╡ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╡реИрд╕реЗ рднреА, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЯреНрдЯрд╛ рдореБрджреНрджреЗ рдкрд░ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐ рдХреА рдПрдХ рд╡рд┐рдирдореНрд░ рд░рд╛рдп рд╣реИред = рдкреА рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд╛ рдПрдХ рдкрд░рд┐рд╖реНрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ r рд╢реИрд▓реА рдХреЗ рдкреБрдирд░реНрдЪрдХреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬреЛ рддрд░реНрдХ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рддрд░реНрдХ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрджрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рд╡реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

unvectorized_sum(a, b, c, d) = a + b + c + d
vectorized_sum = @super_vectorize(unvectorized_sum)

a = [1, 2, 3, 4]
b = [1, 2, 3]
c = [1, 2]
d = 1

A = [1, 2, 3, 4]
B = [1, 2, 3, 1]
C = [1, 2, 1, 2]
D = [1, 1, 1, 1]

vectorized_sum(a, b, c, d) = vectorized_sum(A, B, C, D) = [4, 7, 8, 8]

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдмрдЧреНрдЧреА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ R рдХреЗ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛, рддреЛ рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реЛрдЪрд╛ рдХрд┐ рдХреЛрдИ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕реЛрдЪреЗрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдмреЗрдореЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдмрд╛рдд рд╣реИред рдРрд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЫреЛрдЯреЗ рд╕рд░рдгреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЖрдк рд╢реВрдиреНрдп-рдкреИрдбрд┐рдВрдЧ рдпрд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛, рдпрд╛ рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрд╢рди, рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐, рдпрд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдирд┐рд░реНрднрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдкред

@super_vectorize рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣рд╛рде рдореЗрдВ рд╣реЛрдЧрд╛ред рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░ рдореЗрдВ,

c(1, 2, 3) + c(1, 2)
[1] 2 4 4
Warning message:
In c(1, 2, 3) + c(1, 2) :
  longer object length is not a multiple of shorter object length

рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреАрдЬрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдЗрд╕реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@vectorize_1arg рдФрд░ @vectorize_2arg рджреЛрдиреЛрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЬреЛ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрддреЗ рд╣реИрдВ рд╡реЗ рдХреБрдЫ рд╣рдж рддрдХ рд╕реАрдорд┐рдд рд▓рдЧрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рдореБрджреНрджрд╛ рдмреЗрд╕ рд╕реЗ @vectorize_1arg рдФрд░ @vectorize_2arg рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреЗрд╣рддрд░ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

[ A[i] + B[mod1(i,length(B))] for i in eachindex(A) ]

рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЖрджрд░реНрд╢ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИред рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рд╣реИрдВ (1) рдХреНрдпрд╛ рдЗрд╕реЗ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, (2) рдЗрд╕реЗ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред

@davidagold рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ var: рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЪрд░ рдХреЛрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдирд╛рдо рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЕрд░реНрде A[var:end] рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИред

f(x[:,j]) .* g(x[i,:]) рддрдм f(x[a:,j]) * g(x[i,b:]) for a, b рд╣реЛрдЧрд╛ рдЬреЛ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХрд╛рдзрд┐рдХ рдХреЛрд▓рди рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ред

f(x[:,:,j]) .* g(x[i,:,:]) -> f(x[a:,a:,j]) * g(x[i,b:,b:]) for a, b рдЗрд╕ рдкрд░ рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ред

рдареАрдХ рд╣реИ, рддреЛ рдпрд╣рд╛рдБ рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реНрдЯреИрдм рд╣реИред рдпрд╣ n-рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрднрд╡рддрдГ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдЯреБрдкрд▓реНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

using DataFrames

a = [1, 2, 3]
b = 1
c = [1 2]
d = <strong i="6">@data</strong> [NA, 2, 3]

# coerce an array to a certain size using recycling
coerce_to_size = function(argument, dimension_extents...)

  # number of repmats needed, initialized to 1
  dimension_ratios = [dimension_extents...]

  for dimension in 1:ndims(argument)

    dimension_ratios[dimension] = 
      ceil(dimension_extents[dimension] / size(argument, dimension))
  end

  # repmat array to at least desired size
  if typeof(argument) <: AbstractArray
    rep_to_size = repmat(argument, dimension_ratios...)
  else
    rep_to_size = 
      fill(argument, dimension_ratios...)
  end

  # cut down array to exactly desired size
  dimension_ranges = [1:i for i in dimension_extents]
  dimension_ranges = tuple(dimension_ranges...)

  rep_to_size = getindex(rep_to_size, dimension_ranges...)  

end

recycle = function(argument_list...)

  # largest dimension in arguments
  max_dimension = maximum([ndims(i) for i in argument_list])
  # initialize dimension extents to 1
  dimension_extents = [1 for i in 1:max_dimension]

  # loop through argument and dimension
  for argument_index in 1:length(argument_list)
    for dimension in 1:ndims(argument_list[argument_index])
      # find the largest size for each dimension
      dimension_extents[dimension] = maximum([
        size(argument_list[argument_index], dimension),
        dimension_extents[dimension]
      ])
    end
  end

  expand_arguments = 
    [coerce_to_size(argument, dimension_extents...) 
     for argument in argument_list]
end

recycle(a, b, c, d)

mapply = function(FUN, argument_list...)
  argument_list = recycle(argument_list...)
  FUN(argument_list...)
end

mapply(+, a, b, c, d)

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдпрд╛ рддреЗрдЬрд╝ рдХреЛрдб рдирд╣реАрдВ рд╣реИ (рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдЖрд░ рдЖрдкреНрд░рд╡рд╛рд╕реА рд╣реВрдВ)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕реЗ @vectorize рдореИрдХреНрд░реЛ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛рдПред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕рдВрдпреБрдХреНрдд рдирд┐рд░рд░реНрдердХ рд▓реВрдк
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2: рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╝рдмрд░рджрд╕реНрддреАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ 0-2 рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 3: рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рдореЙрдб рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд░рдгреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрд░реНрдерд╛рддреН,

special_array = [1 2; 3 5]
special_array.dims = (10, 10, 10, 10)
special_array[4, 1, 9, 7] = 3

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 4: рдЬрд┐рди рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛: рдПрдЪрд╕реАрдПрдЯреА рдФрд░ рд╡реАрдХреИрдЯ рдХрд╛ рдПрди-рдЖрдпрд╛рдореА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг? рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдпрд╛ рдЯреБрдкрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдПрди-рдЖрдпрд╛рдореА рд╕рд░рдгреА (рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ) рдХреЛ рднрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛? рд░реЗрдкрдореИрдЯ рдХрд╛ рдПрдХ рдПрди-рдЖрдпрд╛рдореА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг?

[рдкрд╛рдУ: рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ]

рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ foo = function(x,y,z) ... end рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд╛рдо рдХрд╛ рдПрдХ рдЧреИрд░-рдирд┐рд░рдВрддрд░ рдмрдВрдзрди рдмрдирд╛рддрд╛ рд╣реИред рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорд╛рдирджрдВрдб рд╣реИ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рднрдпрд╛рдирдХ рдкреНрд░рджрд░реНрд╢рди рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рд░реЗрдкрдореИрдЯ рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╕рд░рдгреА рднреА рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрдХреЗрдд рд╣реИрдВ: рдЗрддрдиреА рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдРрд╕реА рддрдХрдиреАрдХреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ "рд╕рджрд┐рд╢" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рддрд░реАрдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд▓реВрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдЗрдВрдбреЗрдХреНрд╕ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ https://github.com/JuliaLang/julia/issues/8450#issuecomment -111898906ред

рд╣рд╛рдБ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рд╢реБрд░реБрдЖрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рд▓реВрдкрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ @vectorize рдореИрдХреНрд░реЛ рдмрдирд╛рдПрдВред

function non_zero_mod(big::Number, little::Number)
  result = big % little
  result == 0 ? little : result
end

function mod_select(array, index...)
  # just return singletons
  if !(typeof(array) <: AbstractArray) return array end
  # find a new index with moded values
  transformed_index = 
      [non_zero_mod( index[i], size(array, i) )
       for i in 1:ndims(array)]
  # return value at moded index
  array[transformed_index...]
end

function mod_value_list(argument_list, index...)
  [mod_select(argument, index...) for argument in argument_list]
end

mapply = function(FUN, argument_list...)

  # largest dimension in arguments
  max_dimension = maximum([ndims(i) for i in argument_list])
  # initialize dimension extents to 1
  dimension_extents = [1 for i in 1:max_dimension]

  # loop through argument and dimension
  for argument_index in 1:length(argument_list)
    for dimension in 1:ndims(argument_list[argument_index])
      # find the largest size for each dimension
      dimension_extents[dimension] = maximum([
        size(argument_list[argument_index], dimension),
        dimension_extents[dimension]
      ])
    end
  end

  # more needed here
  # apply function over arguments using mod_value_list on arguments at each position
end

рдмрд╛рддрдЪреАрдд рдореЗрдВ, @JeffBezanson рдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ sin(x) over x , рдХреБрдЫ рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ:
sin(over x) ? (рдпрд╛ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ over рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)

рдПрдХ рдмрд╛рд░ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рд╣рдо #11872 . рднреА рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд╛рд░реНрдЯреА рдореЗрдВ рджреЗрд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ @davidagold рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ +1 рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдФрд░ рд▓рд┐рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ . рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд╣рдЪрд╛рди рд╡рд╛рд▓рд╛ рдЪрд░рд┐рддреНрд░ рд╣реЛрдЧрд╛, рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рддрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдмреВрдд рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ @devec рдХреА рддрд░рд╣)

рдЗрд╕рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рд░рдгреА рд╕рдордЭ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде "рдлрд┐рдЯрд┐рдВрдЧ рдЗрди" рдХрд╛ рд▓рд╛рдн рднреА рд╣реИ:

result = [g(f(.i), h(.j)) over i, j]

рдмрдирд╛рдо

result = [g(f(_i), h(_j)) for _i in eachindex(i), _j in eachindex(j)]

рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдореЗрдВ рдЖрдХрд╛рд░-рд╕рдВрд░рдХреНрд╖рдг рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдз рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд╣реИред

over , range , рдФрд░ window OLAP рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдкреВрд░реНрд╡ рдХрд▓рд╛ рд╣реИ, рдпрд╣ рд╕реБрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ . рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рд╛рдЗрди рд╢реЛрд░ рдХреА рдУрд░ рдПрдХ рд░реЗрдВрдЧрдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

$ рд╢рд╛рдпрдж рд╕реБрд╕рдВрдЧрдд рд╣реИ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ i, j рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдВрдЯрд░реНрди рдХрд░реЗрдВ?

result = [g(f($i), h($j)) over i, j]

рдПрдХ рд╡реНрдпрдВрдЬрдХ рдХреЗ рд╕реНрд╡рдд: рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣рдо рд╡реНрдпрдВрдЬрдХ рдореЗрдВ taint рдПрдХ рд╕рджрд┐рд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрдВрдЬрдХ рдХреЛ рд╕рджрд┐рд╢ рд╕реНрдерд╛рди рдореЗрдВ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЬреВрд▓рд┐рдпрд╛ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ

ts_a = GetTS( ... )
ts_b = GetTS( ... ) 
factors = [ 1,  2, 3 ]

ts_x = ts_a * 2 + sin( ts_a * factors ) + ts_b 

рдЬреЛ рдЬрдм рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реИрдХреНрдЯрд░ рдХреА рдПрдХ рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред

рд▓рд╛рдкрддрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдард╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╣рд╛рде рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ...

abstract TS{K}
function {F}{K}( x::TS{K}, y::TS{K} ) = tsjoin( F, x, y ) 
# tsjoin is a time series iteration operator

рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ

function mean{K}(x::TS{K}) = ... # my hand rolled form

рд╣рд╛рдп @JeffBezanson ,

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдКрдкрд░ рдХреА рдЧрдИ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдЬреВрд▓рд┐рдпрд╛рдХреЙрди 2015 рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
"[...] рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╕рднреА рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдкрд░ @vectorize рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ; рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред"
(рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдиреНрдп рдореМрд▓рд┐рдХ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ "[..] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдареЛрд╕ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╛рдк, рдХреНрд╕реНрдк рдЖрджрд┐ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред")

рдЬреВрд▓рд┐рдпрд╛ v0.40 рдореЗрдВ, рдореИрдВ @vectrorize рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдЪреНрдЫрд╛ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

abstract Vectorizable{Fn}
#Could easily have added extra argument to Vectorizable, but want to show inheritance case:
abstract Vectorizable2Arg{Fn} <: Vectorizable{Fn}

call{F}(::Type{Vectorizable2Arg{F}}, x1, x2) = eval(:($F($x1,$x2)))
function call{F,T1,T2}(fn::Type{Vectorizable2Arg{F}}, v1::Vector{T1}, v2::Vector{T2})
    RT = promote_type(T1,T2) #For type stability!
    return RT[fn(v1[i],v2[i]) for i in 1:length(v1)]
end

#Function in need of vectorizing:
function _myadd(x::Number, y::Number)
    return x+y+1
end

#"Register" the function as a Vectorizable 2-argument (alternative to @vectorize):
typealias myadd Vectorizable2Arg{:_myadd}

<strong i="13">@show</strong> myadd(5,6)
<strong i="14">@show</strong> myadd(collect(1:10),collect(21:30.0)) #Type stable!

рдпрд╣ рдХрдореЛрдмреЗрд╢ рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╣рдж рддрдХ @vectorize рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рдорд╛рди рд╣реИред рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ:

abstract Vectorizable <: Function
abstract Vectorizable2Arg <: Vectorizable

function call{T1,T2}(fn::Vectorizable2Arg, v1::Vector{T1}, v2::Vector{T2})
    RT = promote_type(T1,T2) #For type stability!
    return RT[fn(v1[i],v2[i]) for i in 1:length(v1)]
end

#Note: by default, functions would normally be <: Function:
function myadd(x::Number, y::Number) <: Vectorizable2Arg
    return x+y+1
end

рдЗрддрдирд╛ рд╣реА! рдПрдХ рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдирд╣реЗрд░рд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рдереЗ рдЙрд╕рдХреА рддрд░реНрдЬ рдкрд░ рдпрд╣ред

рд╕рд╛рджрд░,

рдПрдордП

рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди Vectorizable рд╕реЗ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ? рдФрд░ рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

@ ma-laforge рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ --- рдПрдХ рдкреНрд░рдХрд╛рд░ myadd <: Vectorizable2Arg рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░ call рдХреЗ рд▓рд┐рдП myadd рдкрд░ Number рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @JeffBezanson!

рджрд░рдЕрд╕рд▓, рдореИрдВ рд▓рдЧрднрдЧ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рддрдирд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

abstract Vectorizable
#Could easily have parameterized Vectorizable, but want to show inheritance case:
abstract Vectorizable2Arg <: Vectorizable

function call{T1,T2}(fn::Vectorizable2Arg, v1::Vector{T1}, v2::Vector{T2})
    RT = promote_type(T1,T2) #For type stability!
    return RT[fn(v1[i],v2[i]) for i in 1:length(v1)]
end

#SECTION F: Function in need of vectorizing:
immutable MyAddType <: Vectorizable2Arg; end
const myadd = MyAddType()
function call(::MyAddType, x::Number, y::Number)
    return x+y+1
end

<strong i="7">@show</strong> myadd(5,6)
<strong i="8">@show</strong> myadd(collect(1:10),collect(21:30.0)) #Type stable

рдЕрдм, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЧрд╛рдпрдм рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рд╕рдмрдЯрд╛рдЗрдк" рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдкреВрд░реЗ рдЦрдВрдб F рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХреЗ:

function myadd(x::Number, y::Number) <: Vectorizable2Arg
    return x+y+1
end

рдиреЛрдЯ: рдореИрдВрдиреЗ "MyAddType" рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ "myadd" рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрд░рд┐рдгрд╛рдореА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдХреЙрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ Type{Vectorizable2Arg} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛:

function call{T1,T2}(fn::Type{Vectorizable2Arg}, v1::Vector{T1}, v2::Vector{T2})

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ, рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _not_ @vectorize рдореИрдХреНрд░реЛ рдХреА "рдореВрд░реНрдЦрддрд╛" рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

рд╕рд╛рджрд░,

рдПрдордП

@johnmyleswhite :

рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реЛ?

рдПрдХ рдмрд╛рдд рдореИрдВ _can_ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ:
"Vectorizable" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдп "рд╡рд░реНрдЧ" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛: MyFunctionGroupA<:Function )ред рдлрд┐рд░ рд╡реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рдХреЙрд▓" рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рдж: рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдмреЗрд╕ рдХреЗ рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Base.Vectorizable <: Function (рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

myfunction(x::MyType, y::MyType) <: Base.Vectorizable

рдмреЗрд╢рдХ, рдЙрдиреНрд╣реЗрдВ promote_type(::Type{MyType},::Type{MyType}) рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╣рд▓реЗ рд╕реЗ MyType рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ:

MyVectorizable{nargs} <: Function
call(fn::MyVectorizable{2}, x, y) = ...

myfunction(x::MyType, y:MyType) <: MyVectorizable{2}

рдПрдордП

@ рдорд╛-рд▓рд╛рдлреЛрд░реНрдЬ, рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╣рдореЗрд╢рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрдореА рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХрд▓ рд╡рд┐рд░рд╛рд╕рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк myfunction(x::MyType, y::MyType) <: Base.Vectorizable рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рд╕реЗ Base.NullableLiftable рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рдирд▓рдмрд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (cf. https://github.com/JuliaLang/julia/pull/13222)ред рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╢реБрджреНрдз рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдирдИ рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (https://github.com/JuliaLang/julia/pull/13555), рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рд╡рд┐рдзрд┐ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдПрдХрд▓-рддрд░реНрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП)ред

@johnmyleswhite ,

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ: рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ _this_ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди Base.Vectorizable рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _have_ рдирд╣реАрдВ рд╣реИрдВ ... рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ NullableLiftables рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ Base.Function рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ (рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ):

NullableLiftable <: Function

рдЖрдкрдХрд╛ рдореЙрдбреНрдпреВрд▓ рддрдм (рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░) рдПрдХ _new_ рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓ рдЙрдк-рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

abstract VectorizableNullableLiftable <: NullableLiftable

function call{T1,T2}(fn::VectorizableNullableLiftable, v1::Vector{T1}, v2::Vector{T2})
    RT = promote_type(T1,T2) #For type stability!
    return RT[fn(v1[i],v2[i]) for i in 1:length(v1)]
end

рддреЛ, рдЕрдм рд╕реЗ, рдХреЛрдИ рднреА рдЬреЛ <: VectorizableNullableLiftable рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЖрдкрдХрд╛ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рдПрдЧрд╛!

function mycooladdon(scalar1, scalar2) <: VectorizableNullableLiftable
...

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡реЗрдХреНрдЯрд░рд┐рдЬрд╝реЗрдмрд▓-рдкреНрд░рдХрд╛рд░ рдЕрднреА рднреА рдХреБрдЫ рд╣рдж рддрдХ рджрд░реНрдж (рдФрд░ рдереЛрдбрд╝рд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг) рд╣реИ ... рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рджреЛрд╣рд░рд╛рд╡ (1) рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ (рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _each_ рдирдпрд╛ рдЬреЛрдбрд╝рд╛ @vectorize_Xarg рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░реЗрдВ)ред

(1) рдРрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛: myfunction(...)<: Vectorizable ) - рдЬреЛ рдЗрд╕реЗ v0.4.0 рдкрд░ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬреВрд▓рд┐рдпрд╛ 0.4.0 рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╣реИрдХ рд╣реИ ... рдЖрдкрдХреЛ рдЕрднреА рднреА рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ ... @vectorize_Xarg рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ

рдПрдордП

рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдЕрдореВрд░реНрддрддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ "рд╕рджрд┐рд╢" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред _every_ рдлрд╝рдВрдХреНрд╢рди рдХреЛ map рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗ рд░рд╣рд╛ рд╣реИред

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдЬрд┐рд╕ рдмрджрд▓рд╛рд╡ рдкрд░ рдореИрдВ рдЬреЗрдмреА/рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдк function f(x) <: T (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ f рдХреА рдкрд╣рд▓реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП) рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмреЗрд╣рддрд░ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ ... рдФрд░ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде @johnmyleswhite рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рднреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

... рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдм рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рддреЛ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рдФрд░ рднреА рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ:

function call{T1,T2}(fn::Function, v1::Vector{T1}, v2::Vector{T2})
    RT = promote_type(T1,T2) #For type stability!
    return RT[fn(v1[i],v2[i]) for i in 1:length(v1)]
end

myadd(x::Number, y::Number) = x+y+1

рдЪреВрдВрдХрд┐ myadd рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ Function , рдЗрд╕реЗ call рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдлрдВрд╕ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:

call(myadd,collect(1:10),collect(21:30.0)) #No problem

рд▓реЗрдХрд┐рди call рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕реНрд╡рдд: рдкреНрд░реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХреНрдпреЛрдВ):

myadd(collect(1:10),collect(21:30.0)) #Hmm... Julia v0.4.0 does not dispatch this to call...

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдХреИрдЪ-рдСрд▓ рдлрдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреБрдЫ рдЕрдЬреАрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛: рдЬреВрд▓рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

myadd(x,y) = x+y+1 #This gets vectorized automatically, for some reason

рдЖрд░рдИ: рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ ...:
рдардВрдбрд╛! рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШрдЯрд╛рдХрд░ рдореИрдВ рдХреМрди рд╕реА рд╕рд╛рдл-рд╕реБрдерд░реА рдЪреАрдЬреЗрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ :)ред

рдпрджрд┐ рд╡реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рддреЛ рдЬреВрд▓рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкреНрд░рдпреБрдХреНрдд + рдСрдкрд░реЗрдЯрд░ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдХреИрдЪ-рдСрд▓ рдлрдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдкрдХреЗ рдЖрд░рдХреНрд╖рдг рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдХрд╣рддреА рд╣реИ рдХрд┐ "рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ", рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ --- рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ!

рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛: ... рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЧреИрд░-рдпреВрдирд┐рдХреЛрдб рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ $ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╣, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЬ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ "рддреЗрдЬ" рди рд╣реЛ ... рдЕрднреА рддрдХ):

рдЬреВрд▓рд┐рдпрд╛> ($) = рдирдХреНрд╢рд╛
рдЬреВрд▓рд┐рдпрд╛> рдкрд╛рдк $ (0.5 * (abs2 $ (xy)))

@binarybana тЖж / \mapsto рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

julia> x, y = rand(3), rand(3);

julia> тЖж = map    # \mapsto<TAB>
map (generic function with 39 methods)

julia> sin тЖж (0.5 * (abs2 тЖж (x-y)))
3-element Array{Float64,1}:
 0.271196
 0.0927406
 0.0632608

рд╡реЗ рднреА рд╣реИрдВ:

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рдорд╛рдиреВрдВрдЧрд╛ рдХрд┐ \mapsto рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЧрдгрд┐рдд рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ (рдЗрд╕рдХреЗ ASCII рдЕрд╡рддрд╛рд░ рдореЗрдВ, -> ) рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рднреА . рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд▓реНрдХрд┐ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред

рдЧрдгрд┐рдд рдХреА рдмрд╛рдд рдХрд░реЗрдВ ... рдореЙрдбрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдореИрдВрдиреЗ map рдХреЛ рдмрд┐рдирд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдЯреБрдкрд▓ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ \bar{a}=(a_1, \dots, a_n) , рддреЛ f(\bar{a}) f(a_1, \dots, a_n) (рдЕрд░реНрдерд╛рдд, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, apply ) рд╣реИ рдФрд░ f\bar{a} (f(a_1), \dots, f(a_n)) рд╣реИ map )ред рд╕рдорд░реВрдкрддрд╛, рдЖрджрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рдм рдирд╣реАрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: -}

\Mapsto рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ => (рдЬреЛрдбрд╝реА) рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд░рддреАрдХ рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ:

  • ->
  • тЖж

рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдкреНрд░рддреАрдХ рд╣реИрдВ рдЬреЛ рдПрдХ рдЬреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдмрд╣реБрдд рдЕрд▓рдЧ рджрд┐рдЦрддреЗ рд╣реИрдВ рдпрд╛ рд╢реБрджреНрдз ASCII рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд▓реНрдХрд┐ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЕрдиреБрднрд╡ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рд╣реИрдВ?

рдкреНрд░рддреАрдХреЛрдВ рдХреА рддрд░рд╣ рдХрдИ рдЕрдиреНрдп рддреАрд░ рднреА рд╣реИрдВ, рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЧрдгрд┐рдд рдореЗрдВ рдЙрдирдХрд╛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдирд╛рдо рдкрд░ map рд╣реИ! :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ -> рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ ASCII рдореЗрдВ тЖж рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред рддреЛ тЖж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдХреБрдЫ рдФрд░ рд╣реИ, рдпрд╣ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ :-)

рдореЗрд░реА рдЖрдВрдд рдХреА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдЧрдгрд┐рддреАрдп рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдкрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЙрдирдХреЗ рдирд╛рдо рдореЗрдВ map рдХреЗ рд╕рд╛рде рдЪреБрдирдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ (рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ, рдпрд╛ рдРрд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░) рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬреЛрдбрд╝реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕рдЪ рд╣реИ, рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛, рдЬрд╣рд╛рдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдПрдХ рдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рджрд┐рдП рдЧрдП рддрд░реНрдХ (рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди) рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ - рдпрд╛рдиреА, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддрддреНрд╡ рд╣реИ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди, рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢рдмреНрджрдХреЛрд╢)ред

@ рдЗрд╕реНрдорд╛рдЗрд▓-рд╡реАрд╕реА рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ map рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреЛрдИ рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ map((a, b) -> sin(0.5 * abs2(a-b)), x, y) рддрдХ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, тЖж рдХреЛ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдирд╛ рдиреЗрддреНрд░рд╣реАрди рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП ASCII рд╕рдордХрдХреНрд╖ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред

рдЖрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо ~ рдХреЗ рдореМрдЬреВрджрд╛ рдЗрдВрдлрд┐рдХреНрд╕-рдореИрдХреНрд░реЛ рд╕реНрдкреЗрд╢рд▓ рдХреЗрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ (рдЬреАрдПрд▓рдПрдо рдФрд░ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдЬреИрд╕реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдлреЙрд░реНрдореВрд▓рд╛ рдбреАрдПрд╕рдПрд▓ рдХреЛ рдореИрдХреНрд░реЛ-рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд░реЗрдлрд░реА https: / /github.com/JuliaStats/GLM.jl/issues/116), рдЬреЛ рдПрдХ рдЗрдВрдлрд┐рдХреНрд╕ ascii рдСрдкрд░реЗрдЯрд░ рдХреА рджреБрд░реНрд▓рдн рд╡рд╕реНрддреБ рдХреЛ рдореБрдХреНрдд рдХрд░ рджреЗрдЧрд╛ред

a ~ b рдХреЛ рдЖрдзрд╛рд░ рдореЗрдВ map(a, b) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж a .~ b рдХреЛ broadcast(a, b) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдХреНрд░реЛ рдбреАрдПрд╕рдПрд▓ рдЖрд░ рдлреЙрд░реНрдореВрд▓рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреА рддрд░рд╣ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЕрдВрджрд░ рдСрдкрд░реЗрдЯрд░ рдХреА рдЕрдкрдиреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ JuMP <= рдФрд░ == рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред .

рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЙрдирдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЧрдгрд┐рдд рдореЗрдВ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рднреА рдирд╣реАрдВ рд╣реИрдВ ... рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ .#&/@ рд╣реИ

:+1: рдХрдо рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХрддрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк ~ рдФрд░ .~ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрд░реНрде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

+1 рдЯреЛрдиреАред

@tkelman рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sin(0.5 * abs2(a-b)) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рддрд░реАрдХреЗ рд╕реЗ?

рдПрдХ рд╕рдордЭ рдХреЗ рд╕рд╛рде, рд╢рд╛рдпрджред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрдирдлрд┐рдХреНрд╕ рдореИрдк varargs рдпрд╛ рдЗрди-рдкреНрд▓реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдлреНрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред :-/

рдЕрдм рддрдХ sin(0.5 * abs2(a-b)) over (a, b) рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдпрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░, рд╕рдВрднрд╡рддрдГ рдПрдХ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рдмрд╕реЗ рдЖрдХрд░реНрд╖рдХ рд╣реИред

рдЗрд╕ рдЕрдВрдХ рдХрд╛ рд╢реАрд░реНрд╖рдХ " map(func, x) рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕" рд╣реИред рдПрдХ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╕реНрдерд╛рдпреА рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░/рд▓реВрдк рдлреНрдпреВрдЬрди рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдкрдХ, рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдХрд┐рди рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореИрдВ @tkelman рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдмрд┐рдВрджреБ map рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ \mapsto , тЖж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ @nalimilan рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╡реНрдпрд╛рдкрдХ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ IMHO, How to fully vecotrize expressions рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ?

<rambling>
рдпрд╣ рдореБрджреНрджрд╛ рдЕрдм рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ (рдФрд░ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЬрд╛рд░реА рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЕрдиреНрдп рдореБрджреНрджреЗ рдЕрднреА рд╣реИрдВ)! рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Alternative syntax for map(func, x) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред ┬▒ 450 рдЬреВрд▓рд┐рдпрди рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 41 рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдвреВрдВрдврдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдФрд░/рдпрд╛ рдПрдХ рд░рд╛рдп рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ (рдпрд╣ рдПрдХ рдЬреАрдердм рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ), рд╕рднреА рдореЗрдВ рдЗрддрдиреЗ рдЕрд▓рдЧ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рд╣реИрдВ (рдЬреЛ рдПрдХ рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИрдВ)ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдпрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг/рдорддрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ (: рд╣реИрд░рд╛рди :), рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕реЗ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рдереЛрдбрд╝реЗ рджреБрдЦрдж рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╕рдореБрджрд╛рдп рдФрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЕрдиреНрдп рд╕рдореБрджрд╛рдпреЛрдВ рд╕реЗ рдкреВрд░реНрдг рд▓рд╛рдн рдирд╣реАрдВ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рджреБрдЦрдж рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрд▓рдЧ рдФрд░ рддрд╛рдЬрд╛ рд░рд╛рдп рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд░рд╛рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдордд рдХреНрдпрд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рдирд╣реАрдВ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИред
</rambling>

@ рдЗрд╕реНрдорд╛рдЗрд▓-рд╡реАрд╕реА: рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорддрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдЙрд╕ рдкреНрд░рд╢реНрди рдкрд░ рдзреНрдпрд╛рди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

map(func, x) рдореЗрдВ map(v -> sin(0.5 * abs2(v)), x) рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реВрддреНрд░ рдкрд░ рди рд▓реЗ рдЬрд╛рдПрдБ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рддрд╕реНрд╡реАрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред

@ рдЗрд╕реНрдорд╛рдЗрд▓-рд╡реАрд╕реА рдкреЛрд▓ рдпрд╣рд╛рдВ IMHO рдХреА рдорджрдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрдИ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИред рдпрд╣ рдЪрд░реНрдЪрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдВрдмреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

@ рдЗрд╕реНрдорд╛рдЗрд▓-рд╡реАрд╕реА рдпрд╣ рдареАрдХ рд╣реИ, рдмреЗрдЭрд┐рдЭрдХ рдорддрджрд╛рди рдХрд░реЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЕрддреАрдд рдореЗрдВ рдореБрджреНрджреЛрдВ рдкрд░ рдХреБрдЫ рдбреВрдбрд▓ рдкреЛрд▓ рдХрд┐рдП рд╣реИрдВ (рдЬреИрд╕реЗ http://doodle.com/poll/s8734pcue8yxv6t4)ред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рдпрд╛ рдХрдо рд▓реЛрдЧ рдорддрджрд╛рди рдореЗрдВ рдорддрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдЕрдХреНрд╕рд░ рд╕рддрд╣реА/рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЪреБрдирд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛?

рдмреЗрд╢рдХ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдХреНрд╖реНрдп рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, map рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп рд╣рд░ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ map рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдЧрдгрд┐рдд рдЕрдВрдХрди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдЖрд╢рдп рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрдХрди рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рддреНрд╡рд╣реАрди рд╣реИ! рдЧрдгрд┐рддреАрдп рд╕рдВрджрд░реНрдн рдореЗрдВ рдордирдорд╛рдиреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рд▓рдЧрднрдЧ рдЗрд╕ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдЪреАрдЬрд╝ рд╣реИрдбрдорд░реНрдб рдЙрддреНрдкрд╛рдж рд╕рдВрдХреЗрддрди рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╣реИрдВ: https://en.wikipedia.org/wiki/Hadamard_product_ (рдореИрдЯреНрд░рд┐рд╕реЗрд╕)#Analogous_Operations

рдпрд╣ рд╣рдореЗрдВ sinтИШx рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @rfourquet рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ред рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реИрд╕реЗ рднреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИред

@nalimilan , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╕ sin(0.5 * abs2(a-b)) ~ (a,b) рдХрд░реЗрдВрдЧреЗ рдЬреЛ map((a,b)->sin(0.5 * abs2(a-b)), (a,b)) рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдЧрд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореИрдВ рд▓реЗрдЯ-рдореА-рджреЗ-рдпреВ-рдП-рд╡рд┐рд╢рд╛рд▓-рдЬрдЯрд┐рд▓-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рдФрд░-рдЖрдк-рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝-рдЗрдЯ-рдлреЙрд░-рдореА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ/рдХрд╛рд░реНрдпреЛрдВ + рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдЖрджрд┐ рдХреЗ рдбреАрдПрдЬреА рдкрд░ рдкреВрд░реНрдг рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ map рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдордЫрд▓реА рд╣реИред

@quinnj рд╣рд╛рдБ, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд over рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдПрдХ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗред

рдЧрдВрднреАрд░ рдЯрд┐рдкреНрдкрдгреА: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рдлреА рджреВрд░ рддрдХ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрдИ рдЪрд░реЛрдВ рдХреЗ рддрддреНрд╡-рд╡рд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрдВрдХреНрддрд┐-рд╡рд╛рд░ "рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@johnmyleswhite рд╕рд╣рдордд рд╣реИрдВ, рдПрдХ рдбреАрдПрд╕рдПрд▓ рдЙрд░реНрдл тАЛтАЛтАЛтАЛрд▓рд┐рдВрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ

рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╡рд┐рд╖рдп рдкрд░, рдЖрдк |> 'рдкрд╛рдЗрдк' рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╢реИрд▓реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдЬрд┐рд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

julia> (|>)(x::Function, y...) = map(x, y... )
|> (generic function with 8 methods)

julia> (|>)(x::Function, y::Function) = (z...)->x(y(z...))
|> (generic function with 8 methods)

julia> sin |> cos |> [ 1,2,3 ]
3-element Array{Float64,1}:
  0.514395
 -0.404239
 -0.836022

julia> x,y = rand(3), rand(3)
([0.8883630054185454,0.32542923024720194,0.6022157767415313],    [0.35274912207468145,0.2331784754319688,0.9262490059844113])

julia> sin |> ( 0.5 *( abs( x - y ) ) )
3-element Array{Float64,1}:
 0.264617
 0.046109
 0.161309

@johnmyleswhite рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрдердХ рдордзреНрдпрд╡рд░реНрддреА рд▓рдХреНрд╖реНрдп рд╣реИрдВ рдЬреЛ рдХрд╛рдлреА рдорд╛рдореВрд▓реА рд╣реИрдВред рдореЗрд░реА рд╢рд╛рдЦрд╛ рдкрд░, рдорд▓реНрдЯреА-рдСрдкрд░реЗрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ map рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред рддреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреБрдЫ рд╣рдж рддрдХ рдЬрд░реВрд░реА рд╣реИред

@johnmyleswhite рдпрдХреАрди рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рд╕реА SQL рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЪреБрдирдиреЗ, рдХреНрд░рдо рджреЗрдиреЗ рдФрд░ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рддрддреНрд╡-рд╡рд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, SQL рддрддреНрд╡-рд╡рд╛рд░ рд╕рдВрдЪрд╛рд▓рди (рдЬреИрд╕реЗ > , LN ) рд╕реЗ рдХрдЯреМрддреА (рдЬреИрд╕реЗ SUM ) рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреА рддрд░рд╣ рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВред

@JeffBezanson \circ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯ (рдЬреЛ рдорд╛рдирдХ рдЧрдгрд┐рддреАрдп "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рд╣реИ) рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ _is_ рдмрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд░реЗрдВред рддреЛ (sin тИШ x)(i)=sin(x(i)) , рдпрд╛, рдмрд▓реНрдХрд┐ sin(x[i]) ред

рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЬреИрд╕рд╛ рдХрд┐ @mdcfrancis рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ "рдЖрд░реЗрдЦ рдХреНрд░рдо" рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА, рдЬреЛ рдЕрдХреНрд╕рд░ рдЧрдгрд┐рдд рдореЗрдВ (рд╕рдВрднрд╡рддрдГ рд╡рд╕рд╛) рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо (рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢реНрд░реЗрдгреА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕реАрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдЗрдк рд╣реИ рдСрдкрд░реЗрдЯрд░, рдмрд┐рд▓реНрдХреБрд▓ред

рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрдВрдкреЛрдЬрд┐рд╢рди рдСрдкрд░реЗрдЯрд░ рдареАрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд▓реЗрдЦрдХ рдЕрдореВрд░реНрдд рддреАрд░/рдЖрдХреГрддрд┐рд╡рд╛рдж рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди \cdot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рддреАрд░реЛрдВ рдХреЗ рд╕рдореВрд╣ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рдХрд╛ "рдЧреБрдгрд╛" рд╣реИред

рдФрд░ рдЕрдЧрд░ рдХреЛрдИ ASCII рдПрдирд╛рд▓реЙрдЧ рдЪрд╛рд╣рддрд╛ рдерд╛: рдРрд╕реЗ рд▓реЗрдЦрдХ рднреА рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреБрдгрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред (рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ; рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред)

рддреЛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ sin . x рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ :-}

рдлрд┐рд░ рднреА ... рд╡рд╣ рдЕрдВрддрд┐рдо рд╕рд╛рджреГрд╢реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд sin.(x) ред (рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рджреВрд░ рдХреА рдХреМрдбрд╝реА рд╣реИред)

рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдХреЛрдг рд╕реЗ рджреЗрдЦреЗрдВ, рдореБрдЭреЗ рдЧреЛрд▓реА рдордд рдорд╛рд░реЛред

рдпрджрд┐ рд╣рдо .. рдХреЛ collect(..(A,B)) == ((a[1],..., a[n]), (b[1], ...,b[n])) == zip(A,B) рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ T[x,y,z] = [T(x), T(y), T(z)] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐

map(f,A,B) = [f(a[1],b[1]), ..., f(a[n],b[n])] = f[zip(A,B)...] = f[..(A,B)]

рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред :: рдпрд╛ table рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдЯреЗрдВрд╢рди f[::(A,B)] = [f(a[i], b[j]) for i in 1:n, j in 1:n] рдХрдо рд╕реЗ рдХрдо рдПрдХ рджреВрд╕рд░реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдЬреЛ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

@toivoh рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХрд░реВрдБрдЧрд╛ред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рдорддрджрд╛рди/рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдХреЗрд╡рд▓ рдкрд╕рдВрджреАрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорддрджрд╛рди рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рди рдорд╛рдиреЗрдВ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реЛрдЧреАред

рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЗрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ

@nalimilan рд╣рдорд╛рд░реЗ рдмреАрдЪ рдХреЛрдИ рдирд╣реАрдВ, рдпрд╛рдиреАред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдЬрдм рдЖрдк рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдЪреБрдирд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛?
рдореБрджреНрджреЗ рдХреЗ рд╕реВрддреНрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рдпрд╛ рдХрдо рд▓реЛрдЧ рдорддрджрд╛рди рдореЗрдВ рдорддрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

@JeffBezanson рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рдЪреБрдирд╛рд╡ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВ!

  • рдЖрдк рдЕрдкрдиреЗ рдЪреБрдирд╛рд╡реЛрдВ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
  • рдкреЛрд▓/рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реЗ рдореИрдВрдиреЗ рдЕрдм рддрдХ kwiksurveys.com рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ _none is me for me_ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рд░рд╛рдп рдЬреЛрдбрд╝рдиреЗ рджреЗрдВред

sinтИШx рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реИрд╕реЗ рднреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдпреВрдирд┐рдХреЛрдб рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреИрдм рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рднреА рд╣реИ, рдлрд┐рд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?, рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдЗрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░? рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдФрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдорд┐рд╕рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХреЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХреЗрдВ?

тИШ рдХреА рдорд┐рд╕рд╛рд▓ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдпреВрдирд┐рдХреЛрдб рд╣реИ? рдХреНрдпреЛрдВ? рддрдм рд╣рдо рдмрд╛рдХреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдпреВрдирд┐рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдХрднреА рдирд╣реАрдБ?

рдЙрд╕ рддрд░реНрдХ рд╕реЗ, рдЬреВрд▓рд┐рдпрд╛ рд╡реИрд╕реЗ рднреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреЛ рд▓реЛрдЧ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдХрд░реЗрдВрдЧреЗред рдореЗрд░реА рдмрд╣реБрдд рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред

рдХрд╛рдлреА рд╣рдж рддрдХ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ тИШ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВред рдПрдХ рд╕реБрдВрджрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд┐рд░реНрдл рдПрдХ рдирд┐рд╢рд╛рди рд╣реИред рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреВрдм рдЬрд╛рдПред

рдХреНрдпрд╛ ASCII рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ * рдХрд╛ рдЙрдкрдпреЛрдЧ/рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдЧрд▓ рд╣реЛрдЧрд╛? рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... (рдлрд┐рд░ рдлрд┐рд░, рдпрджрд┐ рдпрд╣ map рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рддреЛ map рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ ASCII рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдирд╣реАрдВ?)

\circ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯ (рдЬреЛ рдорд╛рдирдХ рдЧрдгрд┐рддреАрдп "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рд╣реИ) рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдкрд┐рдВрдЧ _is_ рдмрд╕ рд╕рдВрд░рдЪрдирд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦрд░реАрджрддрд╛ рд╣реВрдВред

@hayd рдЗрд╕рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛? рдХрд┐ рдПрдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рд╡рд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреБрдХреНрд░рдо) рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЙрд╕ рдкрд░ рдореИрдкрд┐рдВрдЧ рд░рдЪрдирд╛ рдмрди рдЬрд╛рддреА рд╣реИ? рдпрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рджреЛ (рдЧрдгрд┐рддреАрдп) рдЕрдВрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИрдВред рд▓реЗрдХрд┐рди, рд╣рд╛рдБ, рдореИрдВ рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ - рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ "рдЖрд╣, рд╡рд╣ рдереЛрдбрд╝реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ!" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред

@mlhetland |> -> рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИ рдФрд░ рдЖрдЬ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдореЗрдВ рд╕рд╣реА рд╕рд╣рдпреЛрдЧреА рд╣реЛрдиреЗ рдХрд╛ 'рд▓рд╛рдн' рднреА рд╣реИред

x = parse( "sin |> cos |> [1,2]" )
:((sin |> cos) |> [1,2])

@mdcfrancis рдЬрд╝рд░реВрд░ред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рд░рдЪрдирд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕рдХреЗ рд╕рд┐рд░ рдкрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдпрд╛рдиреА, sinтИШx рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ x |> sin , рдирд╣реАрдВ?

рдкреАрдПрд╕: рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдмреАрдЬрдЧрдгрд┐рдд" рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг T[x,y,z] рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ f[x,y,z] [f(x),f(y),f(z)] рд╕реАрдзреЗ рджреЗрддрд╛ рд╣реИ

map(f,A) == f[A...]

рдЬреЛ рдХрд╛рдлреА рдкрдардиреАрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЪрд╛рд▓рд╛рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ sin[x...] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдкрд░ sin(x) рдпрд╛ sin~x рдЖрджрд┐ рдкрд░ рд╣рд╛рд░ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд┐рдВрдЯреИрдХреНрд╕ [sin xs] рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд╕рд░рдгреА рд╕рдордЭ рдХреЗ рд╕рдорд╛рди рд╣реИ [sin(x) for x in xs] ред

@mlhetland sin |> x === рдирдХреНрд╢рд╛ (рдкрд╛рдк, x)

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдЕрд░реНрде рд╕реЗ рд╡рд┐рдкрд░реАрдд рдХреНрд░рдо рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рдХреНрдХрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдХреНрд░рдордг рдЕрд╡рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@mdcfrancis рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣реА рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ @tkelman рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ) wrtред рдореИрдВрдиреЗ рдЬрд┐рд╕ рд░рдЪрдирд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдФрд░ рдЬрдВрдЬреАрд░ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╢рдмреНрдж рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдВрдЧреЗред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

[1, 2] mapall
  +([2, 3]) map
  ^(2, _) chain
  { a = _ + 1
    b = _ - 1
    [a..., b...] } chain
  sum chain
  [ _, 2, 3] chain
  reduce(+, _)

рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдСрдЯреЛ-рдкреНрд░рд╕рд╛рд░рдг рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреАред рд╢реБрд░реБрдЖрдд рдореЗрдВ [1, 2] рдХреЛ _ рд╕реЗ рдмрджрд▓рдиреЗ рд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрди рд╕рдХрддрд╛ рд╣реИред рдиреЛрдЯ рдореИрдВ рдЪреЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд░ рдХреЗ рдореИрдЧреНрд░рд┐рдЯрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЪреЗрдирд┐рдВрдЧ рдереНрд░реЗрдб рдореЗрдВ рдореЗрд░реА рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВ)ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдбреАрдПрд╕рдПрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧреЗред

рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЕрдм рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдИрдПрдордПрдЪрдУ рдХреЗ рд╣рд╛рде рд╕реЗ рдирд┐рдХрд▓рдиреЗ рд▓рдЧрд╛ рд╣реИред

рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреБрд░рдЬреЛрд░ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ @tkelman рдХрд╛ ~ рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП ASCII рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ sin~x рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдкрд░рд┐рд╖реНрдХреГрдд рдПрдХ-рд▓рд╛рдЗрдирд░ рд╢реИрд▓реА рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред sinтИШx рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдареАрдХ рд░рд╣реЗрдЧрд╛ред рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрдЪрд┐рдд рд▓реВрдк рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди)ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ 'рдЬрд╛рджреБрдИ' рдкреНрд░рд╕рд╛рд░рдг рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдЖрдорддреМрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдкрд╣рд▓реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд map рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓реЗрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ ( jb/functions рд╢рд╛рдЦрд╛ рдХреЗ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ) .

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ jb/functions рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ broadcast(op, x, y) рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг x .op y рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИ рдЬреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ op рдкрд░ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╡рд┐рд╢реЗрд╖реАрдХреГрдд рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрдЪрд┐рдд рд▓реВрдк рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди)ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ 'рдЬрд╛рджреБрдИ' рдкреНрд░рд╕рд╛рд░рдг рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдЖрдорддреМрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред exp(2 * x.^2) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдардиреАрдп рд╣реИ, рдФрд░ [exp(2 * v^2) for v in x] рд╕реЗ рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИред рдЖрдИрдПрдордПрдЪрдУ рдпрд╣рд╛рдВ рдЪреБрдиреМрддреА рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреВрд░реНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдЙрдиреНрд╣реЗрдВ рдлрдВрд╕рд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВ (рдЬреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдлреНрдпреВрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ): рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдзреАрдореЗ рдлреЙрд░реНрдо рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:

рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рд▓реВрдк (рд╢реНрд░реГрдВрдЦрд▓рд╛)
рдХреЗрд╡рд▓ рдЬрдВрдЬреАрд░ рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк (рдорд╛рдирдЪрд┐рддреНрд░)
рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк (рдореИрдкрд▓)

рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд▓реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ (~)
рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд▓реВрдк рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ ( [] рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯ)

рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдЗрдХрд╛рдИ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд┐рдВрдЧрд▓рдЯрди рдЖрдпрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реНрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдкреНрд░рд╕рд╛рд░рдг рд╕реЗ рддрднреА рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЖрдпрд╛рдо рд╣реЛрддрд╛
рдЕрдиреНрдпрдерд╛ рдмреЗрдореЗрд▓ред рддреЛ рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╕рд╛рд░рдг рди рдХрд░реЗрдВ, рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрдХ рджреЗрдирд╛ рд╣реИ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐ рдЕрдЧрд░ рддрд░реНрдХ рдХрд╛ рдЖрдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ?

sin[x...] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ sin(x) рдпрд╛ sin~x рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╢рдГ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рд╡рд┐рдЪрд╛рд░ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдорд╛рдирдЪрд┐рддреНрд░ sin[x...] [f(x...)] рдкрд░ рдПрдХ рдХрдо рдЙрддреНрд╕реБрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред
рд╡рд╛рдХреНрдп рд░рдЪрдирд╛

[exp(2 * (...x)^2)]

рдпрд╛ [exp(2 * (x..)^2)] рдЬреИрд╕рд╛ рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рдХрднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреИрд╕рд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╕рдордЭрд╛рдПрдЧрд╛ред

@nalimilan рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА 'рд╡рди-рд▓рд╛рдЗрдирд░' рд╢реНрд░реЗрдгреА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдмрд┐рдирд╛ рд▓реВрдк рдХреЗ рдареАрдХ рдерд╛ред

рдЬрдмрдХрд┐ рд╣рдо рдЕрдкрдиреА рд╕рднреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ map рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрд╡рдВрдЯрди рдпрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдВред рдпрд╣ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреЗ рд▓рд┐рдП рд▓реВрдк рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (# 249 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрд╢рд╛рд╡рд╛рджреА рдПрдЯреАрдПрдо рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ) рддреЛ рдпрд╣ рд╕рдм рдФрд░ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрд╡рдВрдЯрди рдпрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ map рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ map рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░реАрдЖрд▓реЛрдХреЗрдЯреЗрдб рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ред

рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред

рдЖрд╣, рдмрд┐рд▓реНрдХреБрд▓ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ map! рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ #249 рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдкреВрдЫ рд░рд╣рд╛ рд╣реИред

@jtravs рдореИрдВрдиреЗ рдКрдкрд░ LazyArray (https://github.com/JuliaLang/julia/issues/8450#issuecomment-65106563) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдкреНрд░рджрд░реНрд╢рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рдерд╛ред

@toivoh рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрдИ рд╕рдВрдкрд╛рджрди рдХрд┐рдПред рдЬрд┐рд╕ рдкреНрд░рд╢реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЪрд┐рдВрддрд┐рдд рдерд╛, рд╡рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рддрд░реНрдХреЛрдВ рдХреЛ рд▓реВрдк рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреМрди рд╕реЗ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП рдореИрдкрд▓ рдкреНрд░рд╕рд╛рд░рдг рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рддреБрд▓рдиреАрдп рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓рдЯрди рдЖрдпрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдБ map! рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рдЕрдЪреНрдЫреА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЪреАрдиреА рднреА рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░реЗред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ x := ... рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ RHS рдХреЛ x рдкрд░ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдореИрдк рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЪреЗрдирдореИрдк рдирд╛рдордХ рдПрдХ рдкреИрдХреЗрдЬ рд░рдЦрд╛ рдЬреЛ рдореИрдкрд┐рдВрдЧ рдФрд░ рдЪреЗрдирд┐рдВрдЧ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ:

<strong i="7">@chain</strong> begin
  [1, 2]
  -(1)
  (_, _)
  map_all(+)
  <strong i="8">@chain_map</strong> begin
    -(1)
    ^(2. , _)
  end
  begin
    a = _ - 1
    b = _ + 1
    [a, b]
  end
  sum
end

рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд░рд╣рд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдВрддрддрдГ рд╕рд░рдгреА рд╕рдордЭ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рдЬреВрд▓рд┐рдпрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреВрд▓рд┐рдпрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░рдгреА рд╕рдордЭ рднрд╛рд╖рд╛ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИред

  1. f[a...] рд╕реЗ рд╢реБрд░реВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ @Jutho , рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
    рдХрд┐ рдПрдХ рд╕рджрд┐рд╢ a, b . рдХреЗ рд▓рд┐рдП
f[a...] == map(f, a[:])
f[a..., b...] == map(f, a[:], b[:])
etc

рдЬреЛ рдирдП рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

2.) рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдореИрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдХреА рд╢реБрд░реВрдЖрдд рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦреВрдВрдЧрд╛: рдПрдХ _shape рд╕рдВрд░рдХреНрд╖рд┐рдд_ рд╕реНрдкреНрд▓реИрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ .. (рдХрд╣рддреЗ рд╣реИрдВ)ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ... рдПрдХ _flat_ рд╕реНрдкреИрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП f[a...] рдХреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ, рднрд▓реЗ рд╣реА a n -рдЖрдпрд╛рдореА рд╣реЛред рдпрджрд┐ .. рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ,

f[a.., ] == map(f, a)
f[a.., b..] == map(f, a, b)

рдФрд░ рдкрд░рд┐рдгрд╛рдо рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╕рд╛рд░рдг рдХреА рдЕрдиреБрдорддрд┐

f[a.., b..] == broadcast(f, a, b)

рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реИ

sum(*[v.., v'..]) == dot(v,v)

рд╣реНрдпреВрд░реЗрдХрд╛?

рдпрд╣ рдореИрдкрд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛? over рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

sin(x * (y - 2)) over x, y  == map((x, y) -> sin(x * (y - 2)), x, y) 

рдареАрдХ рд╣реИ, рд╕рдВрднрд╡рддрдГ [sin(x.. * y..)] рдпрд╛ sin[x.. * y..] рдКрдкрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рдУрд╡рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рджреГрд╢реНрдп рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдСрдкрд░реЗрдЯрд░ рддрддреНрд╡реЛрдВ рдкрд░ рд╣реИ рди рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдкрд░ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ x.. рдмрд╕ x рд╕реЗ рдЕрдзрд┐рдХ рдореИрдк рдХрд░реЗрдВ? рддреЛ @johansigfrids рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛:

sin(x.. * (y.. - 2))  == map((x, y) -> sin(x * (y - 2)), x, y)

@jtravs рд╕реНрдХреЛрдкрд┐рдВрдЧ ( [println(g(x..))] рдмрдирд╛рдо println([g(x..)]) ) рдФрд░ рд╕реНрдерд┐рд░рддрд╛ [x..] = x рдХреЗ рдХрд╛рд░рдгред

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ x.. = x[:, 1], x[:, 2], etc. рдХреЛ рдкреНрд░рдореБрдЦ рдЙрдкрд╕рд░рдгрд┐рдпреЛрдВ (рд╕реНрддрдВрднреЛрдВ) рдХреЗ рдЖрдВрд╢рд┐рдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ ..y рдХреЛ рдЕрдиреБрдЧрд╛рдореА рдЙрдкрд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЖрдВрд╢рд┐рдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдП ..y = y[1,:], y[2,:] ред рдпрджрд┐ рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ

[f(v..)] == [f(v[i]) for i in 1:m ]
[v.. * v..] == [v[i] * v[i] for 1:m]
[v.. * ..v] == [v[i] * v[j] for i in 1:m, j in 1:n]
[f(..A)] == [f(A[:, j]) for j in 1:n]
[f(A..)] == [f(A[i, :]) for i in 1:m]
[dot(A.., ..A)] == [dot(A[:,i], A[j,:]) for i in 1:m, j in 1:n] == A*A
[f(..A..)] == [f(A[i,j]) for i in 1:m, j in 1:n]
[v..] == [..v] = v
[..A..] == A

( v рдПрдХ рд╡реЗрдХреНрдЯрд░, A рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕)

рдореИрдВ over рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдзреИрд░реНрдп рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рд╛рд░ https://gist.github.com/mschauer/b04e000e9d0963e40058 рдореЗрдВ рд▓рд┐рдЦреЗред

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрдм рддрдХ _both_ f.(x) рд╕рд╛рдзрд╛рд░рдг рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (" . = рд╡реЗрдХреНрдЯрд░рдХреГрдд" рдореБрд╣рд╛рд╡рд░рд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ), рдФрд░ f(x^2)-x over x рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред

рд╡реЗрдХреНрдЯрд░рдХреГрдд рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдЯрд▓реИрдм, рдирдореНрдкреА, рдЗрддреНрдпрд╛рджрд┐ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЖ рд░рд╣реЗ рд╣реИрдВ; рдЙрдиреНрд╣реЗрдВ рдбреЙрдЯреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ over рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд▓реВрдк рдореЗрдВ рд╕рджрд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред

over рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖ рдХреНрдпреЛрдВ: рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдпрд╛ рдЧреИрд░-рд╡реЗрдХреНрдЯрд░ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, log(A) .- sum(A,1) - рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ log рдХреЗ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред рдЖрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрд╛рдлреА рдмрдбрд╝реА рдХрдореА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ exp(log(A) .- sum(A,1)) рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ exp рдФрд░ log рд╡реЗрдХреНрдЯрд░рдХреГрдд рдФрд░ sum рдирд╣реАрдВ?

@StefanKarpinski , рддреЛ рдЖрдкрдХреЛ рдпрд╛ рддреЛ exp.(log.(A) .- sum(A,1)) рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╕реНрдерд╛рдпреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ), рдпрд╛ s = sum(A, 1); exp(log(A) - s) over A (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдпрджрд┐ sum(A,1) рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдФрд░ рдЖрдк рдкреНрд░рд╕рд╛рд░рдг рдЪрд╛рд╣рддреЗ рдереЗ); рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╕рдордЭ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ sum рд╢реБрджреНрдз рд╣реИ рдФрд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реВрдк/рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдлрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП, рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ broadcast(f, x...) рдпрд╛ map(f, x...) рдХреЗ рд▓рд┐рдП $ f.(x...) рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рддрд╛рдХрд┐ рд╣рдо @vectorize рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХреЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо map рдФрд░ рд╕рдордЭ рдХреЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП over (рдпрд╛ рдЬреЛ рднреА) рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

@stevengj рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ - рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ A рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рдВрдЧрд▓-рдкрдВрдХреНрддрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ A рдХреЗ рддрддреНрд╡ рдХрд╛ рд▓реЙрдЧ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рд░рдХрдо рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдШрдЯрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ broadcast((x, y)->exp(log(x)-y), A, sum(A, 1)) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ map рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ broadcast рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ sin рдЬреИрд╕реЗ рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реА рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛, рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдкрджрд╛рд╡рдирдд рд╣реЛ рдЬрд╛рдПрдЧрд╛? рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ f. рд╕рд┐рдВрдЯреИрдХреНрд╕ рднреА рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рджрд▓ рдХреЗ рд▓рд┐рдП 'рдЧреЙрдЪрд╛' рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░реЗрдЧрд╛ рдЬреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд▓рд╛рд▓рд┐рддреНрдп рддрд░реНрдХреЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ sin рдХреЛ sin. рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрд░реНрдз-рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЕрдиреНрдп рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд▓рд╛рднред

f.(args...) рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдореВрд▓реА (?) рд╕рдорд╕реНрдпрд╛: рд╣рд╛рд▓рд╛рдВрдХрд┐ object.(field) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╡рддрдГ getfield(object, field) рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдПрдХ рд╣реИ Base.(:+)(....) = .... рдлрд╝реЙрд░реНрдо рдХреА рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ/рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ _lot_, рдФрд░ рдЗрдиреНрд╣реЗрдВ getfield рдореЗрдВ рдмрджрд▓рдирд╛ рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧрд╛ред

рдПрдХ рдХрд╛рдордХрд╛рдЬ рд╣реЛрдЧрд╛:

  • рдЕрдиреНрдп рд╕рднреА f.(args...) $ рдХреА рддрд░рд╣ Base.(:+) рдХреЛ map(Base, :+) рдореЗрдВ рдмрджрд▓ рджреЗрдВ, рд▓реЗрдХрд┐рди рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрджрд╛рд╡рдирдд рд╡рд┐рдзрд┐ map(m::Module, s::Symbol) = getfield(m, s) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  • рд╕рд┐рдВрдЯреИрдХреНрд╕ Base.:+ (рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ рдФрд░ Base.(:+) рдХреЗ рд▓рд┐рдП рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВ

рдореИрдВ рдлрд┐рд░ рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЕрдЧрд░ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рд╣рдо 0.5.0 рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ map(Int32, a) рдХреЗ рдмрдЬрд╛рдп int32(a) рдереЛрдбрд╝рд╛ рдердХрд╛рдК рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреБрдирдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреБрдирдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @stevengj рдиреЗ рдЕрдкрдиреЗ рдкреАрдЖрд░ https://github.com/JuliaLang/julia/pull/15032 рдореЗрдВ .sin(x) $ рдХреЗ рдмрдЬрд╛рдп sin.(x) рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЕрдЪреНрдЫреЗ рддрд░реНрдХ рджрд┐рдПред рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд░рд╛рд╕реНрддрд╛ рд╕рд╛рдл рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдпреМрдЧрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрднреА рддрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдорд░реНрдЬ рдХрд░ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЕрдирд╕реБрд▓рдЭрд╛ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@JeffBezanson рдореИрдВ рдЗрд╕ рдкрд░ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ 0.5.0 рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЯреНрд░рд╛рдЗрдПрдЬ рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ - рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдирд╣реАрдВ рднреВрд▓реВрдВред

рдХреНрдпрд╛ #15032 call рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЬреИрд╕реЗ Int32.(x) ?

@ViralBShah , рд╣рд╛рдБред рдХрд┐рд╕реА рднреА f.(x...) рдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрддрд░ рдкрд░ map(f, broadcast, x...) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ f ред

рдпрд╣ . рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рд╣реИ рдЬреИрд╕реЗ f[x...] , рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЖрдХрд░реНрд╖рдХ рд╣реИ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд╛рд░реНрд╕рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА) рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ f::Function рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред f[x...] рднреА T[...] рд╕рд░рдгреА рд╕рдордЭ рдХреЗ рд╕рд╛рде рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдЯрдХрд░рд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @StefanKarpinski рдХреЛ рдмреНрд░реИрдХреЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ?

(рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, PyCall рдореЗрдВ o::PyObject рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ o рдХреА __call__ рд╡рд┐рдзрд┐ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рд╡рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ o[...] рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ f[x...] рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди o.(x...) рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред)

call рдЕрдм рдФрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

(рдореБрдЭреЗ @nalimilan рдХрд╛ рдпрд╣ рддрд░реНрдХ рднреА рдкрд╕рдВрдж рд╣реИ рдХрд┐ f.(x...) .( рдХреЛ .+ рдЖрджрд┐ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рддрд╛ рд╣реИред)

рд╣рд╛рдВ рдмрд┐рдВрджреБрд╡рд╛рд░ рд╕рд╛рджреГрд╢реНрдп рд╡рд╣ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рднреА рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд▓рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЧреЗрдЯрдлреАрд▓реНрдб рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@tkelman , рдХрд┐рд╕рдХреЗ рд╡рд┐рдкрд░реАрдд? рд╣рд╛рд▓рд╛рдВрдХрд┐, Base.(:+) (рдпрд╛рдиреА рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рддреАрдХ рддрд░реНрдХ) рдХреЗ рд▓рд┐рдП рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА $# Base.:+ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ getfield ред (_Update_: рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред)

@ViralBShah , рдХреНрдпрд╛ рдЧреБрд░реБрд╡рд╛рд░ рдХреА рдЯреНрд░рд╛рдЗрдПрдЬ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЗрд╕ рдкрд░ рдХреЛрдИ рдлреИрд╕рд▓рд╛ рд╣реБрдЖ? #15032 рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдпрд░рд▓ рдиреЗ рдХреЙрд▓ рдХрд╛ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдорд┐рд╕ рдХрд░ рджрд┐рдпрд╛ред рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА f.(x) рдХреЗ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд░рдХреНрд╖рдг рд╣реИ рдФрд░ рд╡реЗ рдпрд╛ рддреЛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

  1. рдПрдХ рдЗрдВрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдЬреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рд░рд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рднреА рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдПрдПрд╕рд╕реАрдЖрдИ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред ~ рдХреЗ рдореИрдХреНрд░реЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдпрдж рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред
  2. рдпрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛ рд▓реВрдк рдХреЛ рдлреНрдпреВрдЬ рдХрд░рдирд╛ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред #15032 рдХреЗ рд╕реНрддрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╣реАрдВ рднреА рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╢реЗрд╖ рдЖрд░рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЖрд░рдХреНрд╖рдг рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА f.(x) рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрд╣ ~ рдЬреИрд╕реЗ рдордирдорд╛рдиреЗ рдкреНрд░рддреАрдХ рдХреЛ рдЪреБрдирдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ .* (рдЖрджрд┐) рдХреЗ рдЖрджреА рдХрдИ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЕрд░реНрде рддреБрд░рдВрдд рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдмрд╛рдд рдЬреЛ рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд▓реЛрдЧ _replaceing_ рдореМрдЬреВрджрд╛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде .( рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВред рдЕрдЧрд░ рд▓реЛрдЧ рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреЛрдЪ рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рддреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд╕реНрдк, рдкрд╛рдк рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .^, .* рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рднрд╛рд╡реЛрдВ рдореЗрдВ рдкрд╛рдк рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реВрдБрдЧрд╛ред рдХреНрд╕реНрдк рдЖрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ, рдореЗрд░реЗ рд▓рд┐рдП ... рдЦрд╛рд╕рдХрд░ рдЬрдм рдореИрдВ рдкрд╛рдк (рдПрдХреНрд╕) рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ (рдПрдл, рдПрдХреНрд╕) рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдлреЛрд▓реНрдб рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рднреА рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛!

рдореБрдЭреЗ $ fun.(vec) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд fun[vec] рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИред
рдЖрдк [fun vec] рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдпрд╣ рдПрдХ рд╕реВрдЪреА рд╕рдордЭ рдХреА рддрд░рд╣ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЪрд░ рдХреЗ рд╕рд╛рде рд╣реИред рдпрд╣ T[fun vec] . рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ

рд▓рдВрдмрд╛рдИ> 1 рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреВрд▓рд┐рдпрд╛ 0.4 рдореЗрдВ рдореБрдлрд╝реНрдд рд╣реИ:

julia> [sin rand(1)]
1x2 Array{Any,2}:
 sin  0.0976151

julia> [sin rand(10)]
ERROR: DimensionMismatch("mismatch in dimension 1 (expected 1 got 10)")
 in cat_t at abstractarray.jl:850
 in hcat at abstractarray.jl:875

[fun over vec] рдЬреИрд╕рд╛ рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрддрд░ рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ [fun(x) for x in vec] рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рд▓реЗрдХрд┐рди map(fun,vec) рд╕реЗ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

[fun vec] рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕: рд╕рд┐рдВрдЯреИрдХреНрд╕ (fun vec) рдореБрдлрд╝реНрдд рд╣реИ рдФрд░ {fun vec} рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

julia> (fun vec)
ERROR: syntax: missing separator in tuple

julia> {fun vec}

WARNING: deprecated syntax "{a b ...}".
Use "Any[a b ...]" instead.
1x2 Array{Any,2}:
 fun  [0.3231600663395422,0.10208482721149204,0.7964663210635679,0.5064134055014935,0.7606900072242995,0.29583012284224064,0.5501131920491444,0.35466150455688483,0.6117729165962635,0.7138111929010424]

@diegozea , fun[vec] рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ T[vec] рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред (fun vec) рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрдХреАрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБ-рддрд░реНрдХ рдХрд╛ рдорд╛рдорд▓рд╛ рд╕рдВрднрд╡рддрдГ (fun vec1 vec2 ...) рд╣реИ ... рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЬреВрд▓рд┐рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдпрд╛ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ (fun vec1, vec2, ...) рдерд╛, рдЬреЛ рдЯрдкрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИ? рди рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ fun.(vecs...) рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдЕрдВрддрддрдГ @vectorized рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ (рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╡реИрдХреНрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ "рдзрдиреНрдп" рд╕рдмрд╕реЗрдЯ рди рд╣реЛ), рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдЯрд▓реИрдм, рдирдореНрдкреА, рд╡рдЧреИрд░рд╣ рдореЗрдВ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ/рд╕рд╣рдЬ/рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ sin(A .+ cos(B[:,1])) рдЬреИрд╕реЗ рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ "рд░рдЪрдирд╛рддреНрдордХ" рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░рддреА рд╣реИрдВред

sin.(A .+ cos.(B[:,1])) рдЖрдЦрд┐рд░ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реЛрдЧреАред рдХреНрдпрд╛ f.(x) рдХреЛ .( рдХреЗ рд░реВрдк рдореЗрдВ $#$3 .+ .( рдХреЗ рд╕рдорд╛рди рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
рдХреНрдпрд╛ .+ рдХреЛ +. рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

# Since 
sin.(A .+ cos.(B[:,1]))
# could be written as
sin.(.+(A, cos.(B[:,1])))
# +.
sin.(+.(A, cos.(B[:,1]))) #  will be more coherent.

@diegozea , #15032 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрдЭрд╛рд╡ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

.+ рдХреА рд╡рд░реНрддрдиреА .+ рдмрдиреА рд░рд╣реЗрдЧреАред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрд┐рдВрджреБ рдХрд╛ рдпрд╣ рд╕реНрдерд╛рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рд╡рд░реНрддрдиреА рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛, рдЬреИрд╕рд╛ рдХрд┐ @nalimilan рдиреЗ рдмрддрд╛рдпрд╛, рдЖрдк .( рдХреЛ "рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреНрдб рдлрдВрдХреНрд╢рди-рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реБрд╕рдВрдЧрдд рд╣реИред

( broadcast (#4883) рдореЗрдВ рдЯрд╛рдЗрдк-рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реА рдЖрд╢рд╛ рдПрдХ рдФрд░ рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдХреА рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП a .тзЖ b тзЖ рд╕рд┐рд░реНрдл рдЪреАрдиреА рд╣реЛ broadcast(тзЖ, a, b) рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рддрд░рд╣, рд╣рдореЗрдВ рдЕрдм .+ рд╡рдЧреИрд░рд╣ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ + рдЖрджрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдСрдкрд░реЗрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдХрд░реЗрдВрдЧреЗ рдЕрднреА рднреА рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП broadcast рдУрд╡рд░рд▓реЛрдб рдХрд░рдХреЗ, рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреАрдПрд▓рдПрдПрд╕ рдХреЛ рдХреЙрд▓ред)

рдЗрд╕реЗ sin(A .+ cos(B[:,1])) рдЬреИрд╕реЗ рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ f1.(x, f2.(y .+ z)) рдХреЛ broadcast((a, b, c)->(f1(a, f2(b + c))), x, y, z) $ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИ ... рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ @ рдЬреАрдердм рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкреА рд╣реБрдИ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ ..

@yuyichao , рд▓реВрдк рдлреНрдпреВрдЬрди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ @pure рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ (рдХрдо рд╕реЗ рдХрдо рдпрджрд┐ eltypes рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ), рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ # 15032 рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рдирд╣реАрдВ рдкрд╛рд░реНрд╕рд░ред (рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдВрддрд░рд┐рдХ рд▓реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдЪрдХреНрд░ рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИред)

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп @vectorized рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ; рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп, рд▓рдЧрднрдЧ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХрдо рд╕реЗ рдХрдо рддреЗрдЬрд╝ рдЧрддрд┐ рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реВрдк рдлрд╝реНрдпреВрдЬрд╝рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреА рдХрд┐рд╕реА рддрд╛рд░реАрдЦ рдореЗрдВ рд▓реВрдк рдлрд╝реНрдпреВрдЬрд╝рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ broadcast рдЗрд░рд╛рджреЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рд▓реВрдк рдлреНрдпреВрдЬрди рднреА рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдХрдореА рд╣реИ?

@yuyichao , рд▓реВрдк рдлреНрдпреВрдЬрди рдПрдХ рдмрд╣реБрдд рдХрдард┐рди рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдФрд░ рдЧреИрд░-рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдирд╛ рднреА рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @StefanKarpinski рдХрд╛ exp(log(A) .- sum(A,1)) рдЙрджрд╛рд╣рд░рдг рдКрдкрд░ рджреЗрдЦреЗрдВ)ред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реБрдХрдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╢рд╛рдпрдж _never_ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ - рд╣рдореЗрдВ рдпрд╣ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЕрдЧрд░ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдмрдврд╝рд┐рдпрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдореБрдЯреНрдареА рднрд░ "рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреНрдб" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ .+ рдЖрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ broadcast рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИ; .+ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рд╣реИред рдореЗрд░реА рдпреЛрдЬрдирд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╣реИ ( .+ рдЪреАрдиреА рдХреЗ рд▓рд┐рдП broadcast(+, ...) ), рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░, рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╣реИрдВ рддреЛ рдкреНрд░рдЧрддрд┐ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд▓реВрдк рдлреНрдпреВрдЬрди рдХрд░рдирд╛ рд╡реИрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╛рд░реНрд╕рд░ рдХреЛ рд╕реНрдХреАрдореЗрдЯрд┐рдХреНрд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред exp.(log.(A) .- sum(A,1)) рдФрд░ broadcast((x, y)->exp(log(x) - y), A, sum(A, 1)) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рднреА рдареАрдХ рд╣реИ рдЕрдЧрд░ .+ рдЕрднреА рддрдХ рдПрдХ рд╣реА рд╢реНрд░реЗрдгреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЧреИрд░ рдмреЛрд░реНрдбрдХрд╛рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рддрд░реНрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛) рдФрд░ рдпрд╣ рддрдм рднреА рдареАрдХ рд╣реИ рдЬрдм рд╣рдо рдЗрд╕реЗ (рд▓реВрдк рдлрд╝реНрдпреВрдЬрд╝рди) рдХреЗрд╡рд▓ рдПрдХ рдореЗрдВ рдХрд░реЗрдВрдЧреЗ рдмрд╛рдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдгред рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛рдмрджреНрдзрддрд╛ рд╕рдВрднрд╡ рд╣реИ (рдпрд╛рдиреА рдЧреИрд░-рдЕрд╕реНрдкрд╖реНрдЯ) рдФрд░ рдпрджрд┐ рд▓рд┐рдЦрд┐рдд рд╡реЗрдХреНрдЯрд░рдХреГрдд рдФрд░ рдлрд╝реНрдпреВрдЬрд╝ рд▓реВрдк рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдХреЛрдИ рдбреНрд░реЙ рдмреИрдХ рд╣реИ ..

рд▓реВрдк рдлреНрдпреВрдЬрди рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╡реИрдз рд╣реИ рдХрдард┐рди рд╣реИ

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ (рд╢рд╛рдпрдж рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ), рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ broadcast рдХреЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ broadcast рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╣реИ рд╢рд╛рдпрдж рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рд╢рд╛рдпрдж? рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ .( рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ "рдлреНрдпреВрдЬрд┐рдВрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВ рдХрд┐ рд╡рд╣ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдХрдард┐рди рдорд╛рдорд▓рд╛ рд╣реИ (рдореБрдЭреЗ рдЕрднреА рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ "рдиреЙрди-рдлреНрдпреВрдЬрд┐рдВрдЧ" рдкреАрдЖрд░ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред

рдореИрдВ "рдЧреИрд░-рдлрд╝реНрдпреВрдЬрд╝рд┐рдВрдЧ" рдкреАрдЖрд░ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ .+ рдХреЛ рд╡реИрд╕реЗ рднреА рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдкрдЯрд░реА рд╕реЗ рдирд╣реАрдВ рдЙрддрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди @yuyichao рдХреЗ рд╕реБрдЭрд╛рд╡ рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджрд┐рдПред рдпрд╣рд╛рдВ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ - рдЕрд╕рд▓реА рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЪрд░ рдХреЛ рд╕рджрд┐рд╢ рдмрдирд╛рдирд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред рддрд░реНрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХ рдкрд░ рд╕рджрд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдкрд░ рдирд╣реАрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкреАрдЖрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рддрддреНрдХрд╛рд▓ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

@StefanKarpinski , рдЬрдм рдЖрдк f.(args...) рдпрд╛ broadcast(f, args...) рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддрд░реНрдХреЛрдВ рдХреЛ _all_ рдкрд░ рд╕рджрд┐рд╢ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред (рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕реНрдХреЗрд▓рд░ рдХреЛ 0-рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред) @yuyichao рдХреЗ рд╕реБрдЭрд╛рд╡ рдореЗрдВ f.(args...) = _fused рдкреНрд░рд╕рд╛рд░рдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕_ (рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреНрдпреВрдЬрди рд╣реЛрдЧрд╛ " рд╕реНрдЯреЙрдк" рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдЬреЛ func.(args...) рдирд╣реАрдВ рд╣реИ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ .+ рдЖрджрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sin.(x .+ cos.(x .^ sum(x.^2))) ( julia-syntax.scm рдореЗрдВ) broadcast((x, _s_) -> sin(x + cos(x^_s_)), x, sum(broacast(^, x, 2))) рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ sum рдлрд╝рдВрдХреНрд╢рди "рдлрд╝реНрдпреВрдЬрд╝рди рд╕реАрдорд╛" рд╣реЛрдЧрд╛ред рдХреЙрд▓рд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ f.(args...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдлреНрдпреВрдЬрди рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдЬреЛ рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдЖ рд░рд╣рд╛ рд╣реИ

рдореИрдВ рдЦреБрд╢ рд╣реВрдБ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рд╣реИред =)

рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛ рд╢рд╛рдпрдж рдПрдХ рд╣реА рджреМрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, .= , .*= рдпрд╛ рд╕рдорд╛рди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕реЗ рдЕрд▓рдЧ рдмрдирд╛рдХрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ)

рд╣рд╛рдВ, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлреНрдпреВрдЬрди рдХреА рдХрдореА #7052 рдореЗрдВ .+= рд╡рдЧреИрд░рд╣ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдореБрдЦреНрдп рдЖрдкрддреНрддрд┐ рдереА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп func.(args...) рдХреЙрд▓ рдХреЗ рд╕рд╛рде .= рдлреНрдпреВрдЬ рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ . рдпрд╛ рдмрд╕ x[:] = ... рдлреНрдпреВрдЬ рдХрд░реЗрдВред

:рдЕрдВрдЧреВрдареЗ: рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рджреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИрдВ:
matlab'y "рдлреНрдпреВрдЬреНрдб рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрд╢рдВрд╕" рдпрд╛ x .* y .+ z рдФрд░ apl'y "рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рдЬрд╝рд┐рдкреЛрдВ рдкрд░ рдореИрдкреНрд╕" рдЬреИрд╕реЗ f[product(I,J)...] рдФрд░ f[zip(I,J)...] ред рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдЗрд╕рд╕реЗ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@mschauer , f.(I, J) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА (#15032 рдореЗрдВ) map(x -> f(x...), zip(I, J) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдпрджрд┐ I рдФрд░ J рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рди рд╣реИред рдФрд░ рдЕрдЧрд░ I рдПрдХ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдФрд░ J рдПрдХ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рддреЛ broadcast рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрд╛рдж рд╕реЗрдЯ рдкрд░ рдореИрдк рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдЖрдк f.(I, J') рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╕рд╣реА рд╢рдмреНрдж рдирд╣реАрдВ рдерд╛, рд╡реЗ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред func.(args...) рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рддреНрд░рдпреА рдХрд╛ рд╕рджрд╕реНрдп (рд╕реНрдЯреАрдлрди, рдЬреЗрдл, рд╡рд╛рдпрд░рд▓) #15032 (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд░реНрдЬ-рд░реЗрдбреА рд╣реИ) рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рд╢реЗрд╖ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛрдбрдореИрдк рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░реВрдВрдЧрд╛: рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рдХрд╛рд░-рдЧрдгрдирд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВ, рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВ @vectorize , .op рдХреЛ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд╢реБрдЧрд░ рдореЗрдВ рдмрджрд▓реЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕-рд▓реЗрд╡рд▓ "рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ-рдлрд╝реНрдпреВрдЬрд╝рди" рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрди-рдкреНрд▓реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реНрдпреВрдЬрд╝ рдХрд░реЗрдВред рдЕрдВрддрд┐рдо рджреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ 0.5 рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗред

рдЕрд░реЗ, рдореИрдВ 15032 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢ рдФрд░ рдЖрднрд╛рд░реА рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡реИрдХреНрдЯрд░ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡реИрдХреНрдЯрд░ рдЕрднреА рднреА рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдордЭ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд░рдкрддрд╡рд╛рд░ рдХреА рддрд░рд╣ рдЕрдВрдХреБрд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рдВрдЧрд▓рдЯрди рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдЪреНрдЫрд╛ рдирд┐рд╣рд┐рдд рд╕рдВрдХреЗрддрди рдЗрд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд▓реЗрдХреНрд╕ рдХрд┐рдП рдЧрдП рдЗрдЯрд░реЗрдЯрд░ рдФрд░ рдирдП рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдм #16285 рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

manor picture manor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TotalVerb picture TotalVerb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

StefanKarpinski picture StefanKarpinski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

StefanKarpinski picture StefanKarpinski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arshpreetsingh picture arshpreetsingh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ