使用 julia 迭代器作为常规向量

use a julia iterator as a regular vector

下面的内容让我很疑惑,

sqrt(1:3) * [1 2 3]
# 3x3 Matrix, as expected
sqrt(1:3) * 1:3
# error `colon` has no method matching...

直到我意识到 1:3 一定是另一种野兽,即不仅仅是我从 Matlab 期望的矢量。我目前的解决方法是使用 hcat 将其转换为矢量,sqrt(1:3) * hcat(1:3...),有没有更好的方法?

typeof(1:3) 给出 UnitRange{Int64} (constructor with 1 method),而 typeof([1:3]) 给出:Array{Int64,1}。注意 [1:3] 默认是一个列向量,所以你需要转置它: sqrt(1:3) * [1:3].'

第二个版本的主要问题

sqrt(1:3) * 1:3

实际上是运算符优先级。冒号运算符的优先级非常低,所以这转换为

(sqrt(1:3) * 1):3

这是荒谬的,因此出现错误

 ERROR: `colon` has no method matching colon(::Array{Float64,1}, ::Int64)`

话虽如此,如果您 "fix it" 带有括号,则它不起作用,因为未定义运算符。因此你可能想要 sqrt(1:3) * [1:3]'.