来自R我习惯于做这样的事情来获取 vector 的第一个元素a:
a <- c(1:3, 5)
a[1]
[1] 1
Run Code Online (Sandbox Code Playgroud)
H 我可以1进去Julia吗?的第一个元素a现在是 a range。
a = [1:3, 5]
a[1]
1-element Array{UnitRange{Int64},1}:
1:3
Run Code Online (Sandbox Code Playgroud)
这里的核心问题是c(1:3, 5)在 R 和[1:3, 5]Julia 中不做同样的事情。R 代码将一个向量与一个整数连接起来,产生一个由四个整数组成的向量:
> c(1:3, 5)
[1] 1 2 3 5
Run Code Online (Sandbox Code Playgroud)
Julia 代码构造了一个二元素向量,其元素是范围1:3和整数5:
julia> [1:3, 5]
2-element Vector{Any}:
1:3
5
julia> map(typeof, ans)
2-element Vector{DataType}:
UnitRange{Int64}
Int64
Run Code Online (Sandbox Code Playgroud)
该向量具有元素类型,Any因为没有范围和整数的更小有用的公共超类型。如果你想连接1:3,并5连成一个向量可以用;括号内的,而不是,:
julia> a = [1:3; 5]
4-element Vector{Int64}:
1
2
3
5
Run Code Online (Sandbox Code Playgroud)
a正确定义后,您可以a[1]像在 R 中一样使用它的第一个元素。通常在 Julia 中的方括号内:
逗号 ( ,) 仅用于构造给定元素的向量,就像在 Python、Ruby、Perl 或 JavaScript 中一样。
如果您想要像 R 或 Matlab 中的块连接,那么您需要使用分号/换行符(;或\n)进行垂直连接,并使用空格进行水平连接。
给定的示例[1:3; 5]是块连接的一个非常简单的实例,但也可能有更复杂的实例。这是构造块矩阵的一个奇特的例子:
julia> using LinearAlgebra
julia> A = rand(2, 3)
2×3 Matrix{Float64}:
0.895017 0.442896 0.0488714
0.750572 0.797464 0.765322
julia> [A' I
0I A]
5×5 Matrix{Float64}:
0.895017 0.750572 1.0 0.0 0.0
0.442896 0.797464 0.0 1.0 0.0
0.0488714 0.765322 0.0 0.0 1.0
0.0 0.0 0.895017 0.442896 0.0488714
0.0 0.0 0.750572 0.797464 0.765322
Run Code Online (Sandbox Code Playgroud)
为 StackOverflow 在这里突出显示的糟糕语法道歉:它似乎被 postfix 混淆',将其解释为一个永无止境的字符文字。稍微解释一下这个例子:
A是Float64元素的 2×3 随机矩阵A' 是伴随(共轭转置) AI 是一个可变大小的单位对角运算符0I 相似但对角线标量为零它们连接在一起形成一个 5×5Float64元素矩阵,其中左上角和右下角分别由A'和填充A,左下角填充零,左上角填充 3×3 单位矩阵(即对角线的零)。