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 <tim.h...@gmail.com> 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-ambiguous-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
>
>


-- 
Um axé! :)

--
Charles Novaes de Santana, PhD
http://www.imedea.uib-csic.es/~charles

Reply via email to