访问Julia矩阵中的任意行



我有以下代码,其中给定i,我想找到矩阵的第i行。我的代码如下:

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

然而,我得到以下错误:

ArgumentError: invalid index: :i of type Symbol

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

例如,您可以获得这样的矩阵的第一行:

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

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


在Julia范围内总是需要通过开始和结束,即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

相关内容

  • 没有找到相关文章

最新更新