访问 Julia 矩阵中的任意行
Accessing arbitrary rows in Julia matrix
我有以下代码,给定 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
如您所见,:1
与 1
相同。然而,例如: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
我有以下代码,给定 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
如您所见,:1
与 1
相同。然而,例如: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