Julia 中的 For 循环。语法混乱
For loop in Julia. Syntax confusion
我完全是 Julia 及其语法的菜鸟。我正在尝试关注 this 关于 Julia 半定编程的文章。
如果有人能帮我弄清楚 In[4]
中的 for 循环实际上做了什么,我将不胜感激:
for i in 1:m
A[:, (i-1)*n+1:i*n] .= random_mat_create(n)
b[i] = tr(A[:, (i-1)*n+1:i*n]*X_test)
end
根据我的理解,它应该创建一个矩阵向量 A
(其中 m 个)以及一个 m 维向量 b
。我对 A
的索引和 b
.
的索引完全感到困惑
我想要解释此代码的 :, (i-1)*n+1:i*n
部分。我在这里问的原因是因为我也不知道要 Google 或在 Julia 文档中搜索什么。
(i-1)*n+1:i*n
创建一个从 (i-1)*n + 1
到 i*n
的范围。例如,如果 i
=2 且 n
=10,则此范围变为 11:20
,因此 A[:, (i-1)*n+1:i*n]
将抓取 A
的所有行(这就是 :
确实如此)和第 11-20 列。
里面有两个操作你不太清楚:
:
运算符。考虑一个 Matrix
a = zeros(3,3)
。您可以使用数组切片运算符(类似于 numpy 或 Matlab)来 select 整个第二列,如:a[1:end,2]
。但是,当 select 从 start 到 end
的所有内容都可以省略时,这两个值可以省略,因此您可以写 a[:,2]
(这看起来总是让我记住的最简单的方法)
.
(点)运算符。 Julia 非常注意什么被向量化,什么不被向量化。在 numpy 或 R 中,矢量化操作总是自动发生。在 Julia 中,你拥有控制权——但随着控制而来的是责任。因此,尝试通过写入 a[:, 2] = 5.0
将值分配给第二列将引发错误,因为右侧是向量,左侧是标量。如果你想矢量化,你需要告诉 Julia。因此,点运算符 .=
的意思是“执行逐元素赋值”。请注意,任何 Julia 函数或运算符,甚至您自己的函数都可以用这样的点 .
修饰。由于这是一个非常重要的语言功能,请查看 https://docs.julialang.org/en/v1/manual/arrays/#Broadcasting
我完全是 Julia 及其语法的菜鸟。我正在尝试关注 this 关于 Julia 半定编程的文章。
如果有人能帮我弄清楚 In[4]
中的 for 循环实际上做了什么,我将不胜感激:
for i in 1:m
A[:, (i-1)*n+1:i*n] .= random_mat_create(n)
b[i] = tr(A[:, (i-1)*n+1:i*n]*X_test)
end
根据我的理解,它应该创建一个矩阵向量 A
(其中 m 个)以及一个 m 维向量 b
。我对 A
的索引和 b
.
我想要解释此代码的 :, (i-1)*n+1:i*n
部分。我在这里问的原因是因为我也不知道要 Google 或在 Julia 文档中搜索什么。
(i-1)*n+1:i*n
创建一个从 (i-1)*n + 1
到 i*n
的范围。例如,如果 i
=2 且 n
=10,则此范围变为 11:20
,因此 A[:, (i-1)*n+1:i*n]
将抓取 A
的所有行(这就是 :
确实如此)和第 11-20 列。
里面有两个操作你不太清楚:
:
运算符。考虑一个Matrix
a = zeros(3,3)
。您可以使用数组切片运算符(类似于 numpy 或 Matlab)来 select 整个第二列,如:a[1:end,2]
。但是,当 select 从 start 到end
的所有内容都可以省略时,这两个值可以省略,因此您可以写a[:,2]
(这看起来总是让我记住的最简单的方法).
(点)运算符。 Julia 非常注意什么被向量化,什么不被向量化。在 numpy 或 R 中,矢量化操作总是自动发生。在 Julia 中,你拥有控制权——但随着控制而来的是责任。因此,尝试通过写入a[:, 2] = 5.0
将值分配给第二列将引发错误,因为右侧是向量,左侧是标量。如果你想矢量化,你需要告诉 Julia。因此,点运算符.=
的意思是“执行逐元素赋值”。请注意,任何 Julia 函数或运算符,甚至您自己的函数都可以用这样的点.
修饰。由于这是一个非常重要的语言功能,请查看 https://docs.julialang.org/en/v1/manual/arrays/#Broadcasting