使用 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]'
.
下面的内容让我很疑惑,
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]'
.