Vector 使用julia迭代器作为正则向量

Vector 使用julia迭代器作为正则向量,vector,iterator,julia,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将其转换为向量sqrt1:3*hcat1:3…,有更好的方法吗?typeof1:3使用1方法给出UnitRange{Int64}构造函数,

我对以下几点感到很困惑

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将其转换为向量sqrt1:3*hcat1:3…,有更好的方法吗?

typeof1:3使用1方法给出UnitRange{Int64}构造函数,而typeof[1:3]给出:数组{Int64,1}。请注意,[1:3]在默认情况下是一个列向量,因此需要对其进行转置:sqrt1:3*[1:3]。

typeof1:3使用1方法给出UnitRange{Int64}构造函数,而typeof[1:3]给出:数组{Int64,1}。请注意,[1:3]在默认情况下是一个列向量,因此需要对其进行转置:sqrt1:3*[1:3]。

第二个版本的主要问题

sqrt(1:3) * 1:3
实际上是运算符优先级。冒号运算符的优先级非常低,因此这将转换为

(sqrt(1:3) * 1):3
这是荒谬的,因此是错误的

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

话虽如此,如果用括号修复它,它就不起作用了,因为操作符没有定义。因此,您可能需要sqrt1:3*[1:3]。

第二个版本的主要问题

sqrt(1:3) * 1:3
实际上是运算符优先级。冒号运算符的优先级非常低,因此这将转换为

(sqrt(1:3) * 1):3
这是荒谬的,因此是错误的

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

话虽如此,如果用括号修复它,它就不起作用了,因为操作符没有定义。因此,您可能需要sqrt1:3*[1:3]。

谢谢,我没有想到使用[]来执行转换。它是否等同于1:3的convertArray?显然,它们是不等价的。如果你把@which放在行的开头,你就可以看到abstractarray.jl的基julia中的哪一行正在做这件事,顺便说一下,这很好!例如:@which[1,2,3]给出:vcat{Tthanks,我没有想到使用[]执行转换。它是否等同于convertArray,1:3’?显然它们并不等同。如果您将@which放在行的开头,您可以看到abstractarray.jl的基julia中的哪一行正在执行转换,顺便说一句,这很好!例如:@which[1,2,3]给出:vcat{tindead,这是我的第一个想法,但我尝试用括号括起来,也犯了一个错误,所以我在那一点上停下来承认失败确实,这是我的第一个想法,但我尝试用括号括起来,也犯了一个错误,所以我在那一点上停下来承认失败