我是相當通過以下不解,使用朱莉婭迭代器作爲常規載體
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...)
,有沒有更好的方法?
我是相當通過以下不解,使用朱莉婭迭代器作爲常規載體
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)`
說了這麼多,如果你用括號「修理」它不工作因爲操作員沒有定義。因此你可能需要sqrt(1:3) * [1:3]'
。
謝謝,我沒有想過用'[]'來執行轉換。它會等同於'convert(Array,1:3)。''? – baptiste 2015-03-02 06:48:55
顯然它們不是等價的。如果你在行的開始處加上@ @ which,你可以看到abstractarray.jl的基礎茱莉亞的哪一行正在做它,這很棒!例如:'@which [1,2,3]'在abstractarray.jl:518'處給出:'vcat {T <:Number}(X :: T <:Number ...)。 – Pooya 2015-03-02 14:09:20