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:
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?
CodePudding user response:
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 Vector
s 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
undef
ined 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 an nxn
Matrix (or even a high dimensional Array
) 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.
CodePudding user response:
If you want nx1 matrix you can also use comprehension with 2 indexes:
julia> [i*i for i ∈ 1:5, j ∈ 1:1]
5×1 Matrix{Int64}:
1
4
9
16
25