vector - 如何从包含 Julia 范围的向量中获取值
问题描述
来自R
我习惯于做这样的事情来获取 vector 的第一个元素a
:
a <- c(1:3, 5)
a[1]
[1] 1
H 我可以1
进去Julia
吗?的第一个元素a
现在是 a range
。
a = [1:3, 5]
a[1]
1-element Array{UnitRange{Int64},1}:
1:3
解决方案
这里的核心问题是c(1:3, 5)
在 R 和[1:3, 5]
Julia 中不做同样的事情。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
后,您可以像在 R 中一样获取它的第一个元素a[1]
。通常在 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 在这里突出显示的糟糕语法道歉:它似乎被 postfix 混淆了'
,将其解释为一个永无止境的字符文字。稍微解释一下这个例子:
A
是一个 2×3 的随机Float64
元素矩阵A'
是的伴随(共轭转置)A
I
是可变大小单位对角运算符0I
相似但对角线标量为零
它们连接在一起形成一个 5×5 的Float64
元素矩阵,其中左上和右下部分分别从A'
和填充A
,而左下角用零填充,左上角用 3×3 单位矩阵填充(即对角线的零)。
推荐阅读
- python - 如何区分 32 位和 64 位 python?
- sql - 通过匹配字符串比较 SQL 中两个表的最佳方法?
- powerapps - 如何根据 Microsoft 流程中的条件更改货币符号?
- c - 从我的简单系统调用测试中获取随机垃圾输出
- php - PHP MySQL 自动插入具有相同 X 值的新行 if
- r - 有没有办法使用 R 中的官员(或任何其他替代方法)编辑幻灯片中的现有段落?
- react-native - 测试 Facebook 登录的不同案例
- python - Pygame 错误地检测到不存在的操纵杆
- mysql - 我可以像使用 Node 的 MySQL 一样将 JSON 提交到 Oracle Insert 吗?
- visual-studio-code - Visual Studio 代码无法打开 | MacBook Pro 2019