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
>>>>
>>>>

Reply via email to