How can I get the size of an array in Julia?

I'm trying to run the following piece of code:

function inversePoly(A::Array{Int64,1}, B::Array{Int64,1}) n = size(A) retVal = A[end] / B[end] i = 1 while i != n retVal = (retVal + 1 / B[n - i]) * A[n - i] i += 1 end return retVal end inversePoly(Array(3:4), Array(4:5)) 

However, Julia gives me the following error:

LoadError: MethodError: no method matching -(::Tuple{Int64}, ::Int64) Closest candidates are: -(!Matched::Complex{Bool}, ::Real) at complex.jl:298 -(!Matched::Missing, ::Number) at missing.jl:97 -(!Matched::Base.CoreLogging.LogLevel, ::Integer) at logging.jl:107 ... in expression starting at /home/francisco/Julia/abc.jl:12 inversePoly(::Array{Int64,1}, ::Array{Int64,1}) at abc.jl:6 top-level scope at none:0 

The 6th line would be

retVal = (retVal + 1 / B[n - i]) * A[n - i] 

This means that the statement

n = size(A) 

Is saving a tuple in the variable n instead of an integer

How can I get an integer representing the number of elements in A?

Thanks in advance

1 Answer

Here is how you should use size:

julia> x = [1,2,3] 3-element Array{Int64,1}: 1 2 3 julia> size(x) (3,) julia> size(x)[1] 3 julia> size(x, 1) 3 

so either extract the first element from size(x) or directly specify which dimension you want to extract by passing 1 as a second argument.

In your case, as A is a Vector (it is single dimensional) you can also use length:

julia> length(x) 3 

Which gives you an integer directly.

The difference between length and size is the following:

  • length is defined for collections (not only arrays) and returns an integer which gives you the number of elements in the collection
  • size returns a Tuple because in general it can be applied to multi-dimensional objects, in which case the tuple has as many elements as there are dimensions of the object (so in case of Vector, as in your question, it is 1-element tuple)
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like