As given above, the time is in sum_reldiffs, the space is in the count_zeros.
On Tuesday, October 25, 2016 at 4:42:02 AM UTC-4, Jeffrey Sarnoff wrote: > > (you may like that visual noise if the code finds more than 1 year's use) > Which matters more to you saving time or saving space? > > On Tuesday, October 25, 2016 at 4:39:33 AM UTC-4, Martin Florek wrote: >> >> Thnaks, It is true, but when I apply @benchmark v3 is 6 times slower as >> v1, also has a large allocation and I do not want it. For me speed is >> important and v3 is not without visual noise, too. Any more thoughts? >> >> ben1 = @benchmark mapeBase_v1(a,f) >> BenchmarkTools.Trial: >> samples: 848 >> evals/sample: 1 >> time tolerance: 5.00% >> memory tolerance: 1.00% >> memory estimate: 32.00 bytes >> allocs estimate: 1 >> minimum time: 4.35 ms (0.00% GC) >> median time: 5.87 ms (0.00% GC) >> mean time: 5.89 ms (0.00% GC) >> maximum time: 7.57 ms (0.00% GC) >> >> ben2 = @benchmark mapeBase_v3(a,f) >> BenchmarkTools.Trial: >> samples: 145 >> evals/sample: 1 >> time tolerance: 5.00% >> memory tolerance: 1.00% >> memory estimate: 977.03 kb >> allocs estimate: 14 >> minimum time: 32.69 ms (0.00% GC) >> median time: 33.91 ms (0.00% GC) >> mean time: 34.55 ms (0.10% GC) >> maximum time: 49.03 ms (3.25% GC) >> >> >> >> >> On Tuesday, 25 October 2016 09:43:20 UTC+2, Jeffrey Sarnoff wrote: >>> >>> This may do what you want. >>> >>> function mapeBase_v3(actuals::Vector{Float64}, forecasts::Vector{Float64}) >>> # actuals - actual target values >>> # forecasts - forecasts (model estimations) >>> >>> sum_reldiffs = sumabs((x - y) / x for (x, y) in zip(actuals, forecasts) >>> if x != 0.0) # Generator >>> >>> count_zeros = sum( map(x->(x==0.0), actuals) ) >>> count_nonzeros = length(actuals) - count_zeros >>> sum_reldiffs, count_nonzeros >>> end >>> >>> >>> >>> >>> On Tuesday, October 25, 2016 at 3:15:54 AM UTC-4, Martin Florek wrote: >>>> >>>> Hi all, >>>> I'm new in Julia and I'm doing refactoring. I have the following >>>> function: >>>> >>>> function mapeBase_v1(A::Vector{Float64}, F::Vector{Float64}) >>>> s = 0.0 >>>> count = 0 >>>> for i in 1:length(A) >>>> if(A[i] != 0.0) >>>> s += abs( (A[i] - F[i]) / A[i]) >>>> count += 1 >>>> end >>>> end >>>> >>>> s, count >>>> >>>> end >>>> >>>> I'm looking for a simpler variant which is as follows: >>>> >>>> function mapeBase_v2(A::Vector{Float64}, F::Vector{Float64}) >>>> # A - actual target values >>>> # F - forecasts (model estimations) >>>> >>>> s = sumabs((x - y) / x for (x, y) in zip(A, F) if x != 0) # Generator >>>> >>>> count = length(A) # ??? >>>> s, countend >>>> >>>> >>>> However with this variant can not determine the number of non-zero >>>> elements. I found option with length(A[A .!= 0.0]), but it has a large >>>> allocation. Please, someone knows a solution with generator, or variant v1 >>>> is very good choice? >>>> >>>> >>>> Thanks in advance, >>>> Martin >>>> >>>>