Vector 如何从包含范围的向量中获取值

Vector 如何从包含范围的向量中获取值,vector,julia,Vector,Julia,来自R我习惯于这样做来获得向量a的第一个元素: a <- c(1:3, 5) a[1] [1] 1 在本例中,a[1]是一个UnitRange集合。如果要访问其中的单个元素,可以使用collect 例如,对于第一个元素 collect(a[1])[1] 这里的核心问题是,R中的c(1:3,5)和Julia中的[1:3,5]做的事情不一样。R码将一个向量与一个整数连接起来,生成一个由四个整数组成的向量: > c(1:3, 5) [1] 1 2 3 5 Julia码构造了一个两元素

来自
R
我习惯于这样做来获得向量
a的第一个元素:

a <- c(1:3, 5)
a[1]
[1] 1

在本例中,a[1]是一个UnitRange集合。如果要访问其中的单个元素,可以使用collect

例如,对于第一个元素

collect(a[1])[1]

这里的核心问题是,R中的
c(1:3,5)
和Julia中的
[1:3,5]
做的事情不一样。R码将一个向量与一个整数连接起来,生成一个由四个整数组成的向量:

> c(1:3, 5)
[1] 1 2 3 5
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
这个向量有元素类型
Any
,因为没有更小的有用的范围和整数的公共超类型。如果要将
1:3
5
连接到一个向量中,可以使用
而不是

julia> a = [1:3; 5]
4-element Vector{Int64}:
 1
 2
 3
 5
一旦正确定义了
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
在此为StackOverflow糟糕的语法突出表示歉意:它似乎被后缀
弄糊涂了,将其解释为一个不连续的字符文字。要稍微解释一下这个例子:

  • A
    Float64
    元素的2×3随机矩阵
  • A'
    A的伴随(共轭转置)
  • I
    是一个可变大小的单位对角运算符
  • 0I
    类似,但对角线标量为零

这些元素串联在一起形成一个由
Float64
元素组成的5×5矩阵,其中左上部分和右下部分分别由
a'
a
填充,而左下部分由零填充,左上部分由3×3单位矩阵填充(即零与对角线).

无需收集。a[1][1]也起作用。虽然显示OP在朱丽亚中创建的向量并不等同于RYou中的OPF向量,但可能要考虑将接受的答案转换为斯特凡的响应。虽然Sam的回答确实给出了您想要的元素,但是使用
collect
是不必要的,实际上是Julia中一个非常常见的性能“gotcha”。
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