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

时间:2015-03-02 04:55:03

标签: vector iterator julia

我对以下内容感到非常困惑,

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...),是否有更好的方法?

2 个答案:

答案 0 :(得分:5)

第二个版本的主要问题

sqrt(1:3) * 1:3

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

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

这是荒谬的,因此错误

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

话虽如此,如果你"修复它"由于没有定义运算符,所以使用括号不起作用。因此,您可能需要sqrt(1:3) * [1:3]'

答案 1 :(得分:2)

typeof(1:3)提供UnitRange{Int64} (constructor with 1 method),而typeof([1:3])则提供:Array{Int64,1}。请注意,[1:3]默认为列向量,因此您需要对其进行转置:sqrt(1:3) * [1:3].'