this change saves some space: `count_zeros = length( find(x->x==0.0,
actuals) )`
On Tuesday, October 25, 2016 at 4:48:29 AM UTC-4, Jeffrey Sarnoff wrote:
>
> 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
>>>>>
>>>>>