3

我有以下代码,如果i我想找到i矩阵的第 th 行。我的代码如下:

function f(mat,i)
     println(mat[:i,:])
end

但是,我收到以下错误:

ArgumentError: invalid index: :i of type Symbol

我试过打印iusing的类型,typeof它说它是Int64. 此外,如果我试图只找到第一行然后mat[:1,:]完成这项工作,所以我认为问题不在于切片语法。

4

1 回答 1

5

例如,您可以获得矩阵的第一行,如下所示:

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

请注意,通常您只需传递一个行号(在我的情况下1)来指示您要获取的行。在这种情况下,您会得到一个Vector.

但是,您可以使用切片1:1来获取 1 个元素的行范围。在这种情况下,结果是Matrix只有一行。


现在的问题:1。见下文:

julia> :1
1

julia> typeof(:1)
Int64

julia> :1 == 1
true

julia> :x
:x

julia> typeof(:x)
Symbol

如您所见:1,与1. 然而, eg:x是一种特殊类型,称为Symbol. 它最常见的用途是表示结构中的字段名称。由于字段名称不能以数字开头(Julia 中的变量名称,以及其他编程语言中的变量名称)必须以其他名称开头,例如x我的示例中的字母,因此这里没有歧义。将数字放在:数字前面是无操作的,而将它放在有效变量标识符前面会创建一个Symbol. Symbol有关更多示例,请参阅 Julia REPL 中的帮助。


在 Julia 范围内总是需要传递 start 和 end 即a:b是一个范围从包含开始a和结束b,例如:

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
于 2021-10-28T19:09:36.143 回答