Thanks Andrew for answer. I also have experience that eachindex() is slightly faster. In Performance tips I found macros e.g. @simd. Do you have any experience with them?
On Thursday, 6 October 2016 16:13:22 UTC+2, Martin Florek wrote: > > > Hi All, > > I'm new in Julia and I need to decide about the more correct/better > implementation for two data collection. I have implemented mean absolute > percentage error (MAPE) for *Generator Expressions* (Comprehensions > without brackets): > > a = rand(10_000_000) > p = rand(10_000_000) > > err(actual, predicted) = (actual - predicted) / actual > > f(a, p) = 100 * sumabs(err(a[i], p[i]) for i in eachindex(a)) /length(a) > > a with *mapreduce()* function. > > function mapre(a, p) > s = mapreduce(t -> begin b,c=t; abs((b - c) / b) end, +, zip(a, p)) > s * 100/length(a) > end > > When compare *@time f(a,p) *I get: > > 0.026515 seconds (11 allocations: 304 bytes) 797.1301337918511 > > and *@time mapre(a, p):* > > 0.079932 seconds (9 allocations: 272 bytes) 797.1301337918511 > > > Thanks in advance, > Martin >
