我对以下内容感到非常困惑,
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...)
,是否有更好的方法?
答案 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].'