访问 Julia 矩阵中的任意行

new*_*his 3 types matrix slice argument-error julia

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

function f(mat,i)
     println(mat[:i,:])
end
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

ArgumentError: invalid index: :i of type Symbol
Run Code Online (Sandbox Code Playgroud)

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

Bog*_*ski 5

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

\n
julia> x = rand(4, 5)\n4\xc3\x975 Matrix{Float64}:\n 0.995364  0.00204836  0.0821081  0.732777   0.705893\n 0.4392    0.151428    0.0978743  0.184995   0.867329\n 0.863659  0.367339    0.252248   0.235425   0.0343476\n 0.756938  0.119276    0.857559   0.0982663  0.938148\n\njulia> x[1, :]\n5-element Vector{Float64}:\n 0.9953642825497493\n 0.0020483620556226434\n 0.0821081267390984\n 0.7327765477421397\n 0.7058932509878071\n\njulia> x[1:1, :]\n1\xc3\x975 Matrix{Float64}:\n 0.995364  0.00204836  0.0821081  0.732777  0.705893\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
\n

现在的问题是:1. 见下文:

\n
julia> :1\n1\n\njulia> typeof(:1)\nInt64\n\njulia> :1 == 1\ntrue\n\njulia> :x\n:x\n\njulia> typeof(:x)\nSymbol\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\n

在 Julia 范围中,始终需要传递开始和结束,即从包含开始到结束的a:b范围,示例:ab

\n
julia> 1:1\n1:1\n\njulia> collect(1:1)\n1-element Vector{Int64}:\n 1\n\njulia> 2:4\n2:4\n\njulia> collect(2:4)\n3-element Vector{Int64}:\n 2\n 3\n 4\n
Run Code Online (Sandbox Code Playgroud)\n