Unlike Int, Float32/Float64 is not architecture-specific. Common misperception.

--Tim

On Monday, January 04, 2016 02:17:14 PM Charles Novaes de Santana wrote:
> Thanks a lot for your message, Tim.
> 
> I was wondering that it could be because of the AbstractFloat too. It makes
> sense.
> 
> I am using AbstractFloat because I want to make it clear that the matrix
> has Float elements, but I don't want to specify the architecture of the
> machine of the user, because I had problems with users using 32bits
> machines.
> 
> I will definitely read the link you sent me. And I will let you know what I
> decide to use in our code. Thanks for your suggestion too!!
> 
> Best,
> 
> Charles
> 
> On 4 January 2016 at 14:03, Tim Holy <[email protected]> wrote:
> > It has nothing to do with whether you're using a Matrix (which is just an
> > Array{T,2}) or general Arrays. The question is, do you have to use
> > AbstractFloat?
> > 
> > julia> a = Float64[1,2,3]
> > 
> > 3-element Array{Float64,1}:
> >  1.0
> >  2.0
> >  3.0
> > 
> > julia> b = AbstractFloat[1,2,3]
> > 
> > 3-element Array{AbstractFloat,1}:
> >  1.0
> >  2.0
> >  3.0
> > 
> > julia> log(a.^2)
> > 
> > 3-element Array{Float64,1}:
> >  0.0
> >  1.38629
> >  2.19722
> > 
> > julia> log(b.^2)
> > ERROR: MethodError: `log` has no method matching log(::Array{Any,1})
> > 
> > julia> typeof(a.^2)
> > Array{Float64,1}
> > 
> > julia> typeof(b.^2)
> > Array{Any,1}
> > 
> > julia> Base.return_types(*, (AbstractFloat, AbstractFloat))
> > 
> > 8-element Array{Any,1}:
> >  Float32
> >  Float64
> >  Float16
> >  BigFloat
> >  BigFloat
> >  BigFloat
> >  Union{}
> >  Any
> > 
> > You could do this:
> > julia> b2 = AbstractFloat[v^2 for v in b]
> > 
> > 3-element Array{AbstractFloat,1}:
> >  1.0
> >  4.0
> >  9.0
> > 
> > julia> log(b2)
> > 
> > 3-element Array{Any,1}:
> >  0.0
> >  1.38629
> >  2.19722
> > 
> > But overall, I highly recommend reading the performance tips page and
> > these
> > two sections of the FAQ:
> > http://docs.julialang.org/en/stable/manual/faq/#what-does-type-stable-mean
> > 
> > http://docs.julialang.org/en/stable/manual/faq/#how-do-abstract-or-ambiguo
> > us-fields-in-types-interact-with-the-compiler
> > 
> > Best,
> > --Tim
> > 
> > On Monday, January 04, 2016 01:47:44 PM Charles Novaes de Santana wrote:
> > > Hi people,
> > > 
> > > I would like to work with matrices represented as Arrays of Arrays of
> > > 
> > > AbstractFloats. Something like this:
> > >         F=Array{AbstractFloat}[];#initialize the matrix F as an Array of
> > > 
> > > Arrays of Float
> > > 
> > >         for (i in 1:10)
> > >         
> > >             Fi = Array(AbstractFloat,0);#initialize the vector Fi as an
> > > 
> > > Array of Float
> > > 
> > >             for (k in 1:5)
> > >             
> > >                 push!(Fi,k^2+i^2)
> > >             
> > >             end#end-fork
> > >             push!(F,Fi);
> > >         
> > >         end#end-fori
> > >         
> > >         typeof(F)
> > >         Array{Array{AbstractFloat,N},1}
> > > 
> > > But I am experiencing problems to work with rows/columns of such Arrays.
> > 
> > I
> > 
> > > would like to calculate the logarithm of the square of elements of those
> > > 
> > > rows/columns like this:
> > >         f = F[1];#a vector of AbstractFloat
> > >         
> > >         typeof(f)
> > >         Array{AbstractFloat,1}
> > >         
> > >         typeof(f.^2)
> > >         Array{Any,1}
> > >         
> > >         log(f.^2)
> > >         ERROR: MethodError: `log` has no method matching
> > 
> > log(::Array{Any,1})
> > 
> > > I understand this error only happens because I am working with Arrays of
> > > Arrays of AbstractFloats. If I run a similar code using a Matrix instead
> > 
> > of
> > 
> > > Array I don't have such problems:
> > >        A = rand(10,5);#a matrix of floats (similar to an array of
> > >        arrays)
> > >        
> > >         typeof(A)
> > >         Array{Float64,2}
> > >         
> > >         a = A[1,:];#a vector of Float
> > >         
> > >         typeof(a)
> > >         Array{Float64,2}
> > >         
> > >         typeof(a.^2)
> > >         Array{Float64,2}
> > >         
> > >         log(a.^2)
> > > 
> > > everything runs smoothly.
> > > 
> > > My question: Am I doing something wrong in the way I am dealing with the
> > > Array of Arrays of AbstractFloat? Should I convert it to a Matrix? Or
> > > should I convert its elements to Array of Float instead of Array of Any?
> > > Any other suggestion?
> > > 
> > > Thanks for your attention and for any advice!
> > > 
> > > Charles

Reply via email to