I have the following code, where given i I want to find the ith row of a matrix. My code is the following:
function f(mat,i)
println(mat[:i,:])
end
However, I get the following error:
ArgumentError: invalid index: :i of type Symbol
I have tried printing the type of i using typeof and it says it is Int64. Further, if I attempt to just find the first row then mat[:1,:] does the job so I don't think the problem is with the slicing syntax.
You can get e.g. the first row of a matrix like this:
julia> x = rand(4, 5)
4×5 Matrix{Float64}:
0.995364 0.00204836 0.0821081 0.732777 0.705893
0.4392 0.151428 0.0978743 0.184995 0.867329
0.863659 0.367339 0.252248 0.235425 0.0343476
0.756938 0.119276 0.857559 0.0982663 0.938148
julia> x[1, :]
5-element Vector{Float64}:
0.9953642825497493
0.0020483620556226434
0.0821081267390984
0.7327765477421397
0.7058932509878071
julia> x[1:1, :]
1×5 Matrix{Float64}:
0.995364 0.00204836 0.0821081 0.732777 0.705893
Note that normally you just pass a row number (in my case 1) to signal the row you want to fetch. In this case as a result you get a Vector.
However, you can use slicing 1:1 which gets a 1-element range of rows. In this case the result is a Matrix having one row.
Now the issue of :1. See below:
julia> :1
1
julia> typeof(:1)
Int64
julia> :1 == 1
true
julia> :x
:x
julia> typeof(:x)
Symbol
As you can see :1 is just the same as 1. However, e.g. :x is a special type called Symbol. Its most common use is to represent field names in structs. Since field names cannot start with a number (variable names in Julia, as also in other programming languages) have to start with something else, e.g. a letter x as in my example, there is no ambiguity here. Putting : in front of a number is a no-op, while putting it in front of a valid variable identifier creates a Symbol. See the help for Symbol in the Julia REPL for more examples.
In Julia ranges always require passing start and end i.e. a:b is a range starting from a and ending with b inclusive, examples:
julia> 1:1
1:1
julia> collect(1:1)
1-element Vector{Int64}:
1
julia> 2:4
2:4
julia> collect(2:4)
3-element Vector{Int64}:
2
3
4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With