Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Julia: How to make a matrix in for loop

I’m a newbie to Julia. Before then, I used Matlab.
For the Matlab case, I wrote commands to make the matrix in the for loop, as follows:

for i=1:1:100; k(i,:)=i.^2; end

I typed the same commands in Julia, but it didn’t work.
Furthermore, I tried other commands as follows:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

n=100;
k = Array{Int64, n};
for i in 1:n;
    k[i]= i;
end;

However, the error happened as follows:

MethodError: no method matching setindex!(::Type{Array{Int64, 10}}, ::Int64, ::Int64)

How to make a matrix in for loop in Julia?

>Solution :

You can follow this approach:

julia> n = 100;

julia> k = Array{Int64, 1}(undef, n);

julia> for i in 1:n
           k[i]=i
       end

julia> k
100-element Vector{Int64}:
   1
   2
   3
   4
   5
   6
   ⋮

The problem with your code is where you wrote k = Array(Int64, n). In Julia, you can define an initialized Vector using one of these approaches:

julia> Array{Int64, 1}(undef, 5)
5-element Vector{Int64}:
        1052672
 17592455528464
    68987912208
  2137636676096
              0

julia> Vector{Int64}(undef, 5)
5-element Vector{Int64}:
 2137626020784
 2137626020816
 2137626020848
 2137626020880
          3063

julia> zeros(Int64, 5)
5-element Vector{Int64}:
 0
 0
 0
 0
 0

julia> ones(Int64, 5)
5-element Vector{Int64}:
 1
 1
 1
 1
 1

In the above, I created some initialized Vectors with specific attributes, all with length 5. Note that the meaning of Array{Int64, 1}(undef, 5) can be translated to create an object of type Array with the number of dimensions equal to 1 (a Vector in fact) and put 5 undefined values of type Int64 in it.
But if you want to make a Matrix (considering the way you wrote k[i]= i, it seems to me that you want an nx1 dimensional Matrix), then you can do the following:

julia> n = 100;

julia> k = Array{Int64, 2}(undef, n, 1);

julia> for i in 1:n
           k[i]=i
       end

julia> k
100×1 Matrix{Int64}:
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
   ⋮

Note that the type of k is Matrix with element type Int64. using the following approaches, you can create an initialized Matrix:

julia> Array{Int64, 2}(undef, 5, 1)
5×1 Matrix{Int64}:
 1
 2
 3
 4
 5

julia> Matrix{Int64}(undef, 5, 1)
5×1 Matrix{Int64}:
             1
             4
 2137623855824
 2137623855888
             0

julia> zeros(5, 1)
5×1 Matrix{Float64}:
 0.0
 0.0
 0.0
 0.0
 0.0

julia> ones(5, 1)
5×1 Matrix{Float64}:
 1.0
 1.0
 1.0
 1.0
 1.0

In all above, 5, 1 specifies the matrix’s dimension.


Additional Note

Note that you can assign values to a nxn matrix using single indexing:

julia> k = [5; 7;;8; 9]
2×2 Matrix{Int64}:
 5  8
 7  9

julia> for i in eachindex(k)
           k[i]=i
       end

julia> k
2×2 Matrix{Int64}:
 1  3
 2  4

julia> k
2×2 Matrix{Int64}:
 1  3
 2  4

In the above, the eachindex(k) creates a UnitRange which contains values from 1 up to 4 (since the k has 4 elements) and is iterable.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading