unicode cdot和*在julia中的区别

时间:2017-01-26 19:31:31

标签: julia

我开始在我的Julia代码中使用unicode cdot代替*,因为我觉得它更容易阅读。我以为它们是一样的,但显然有一点我不明白。有关于此的文件吗?

julia> 2pi⋅(0:1)
ERROR: MethodError: no method matching dot(::Float64, ::UnitRange{Int64})
Closest candidates are:
  dot(::Number, ::Number) at linalg\generic.jl:301
  dot{T<:Union{Float32,Float64},TI<:Integer}(::Array{T<:Union{Float32,Float64},1}, ::Union{Range{TI<:Integer},UnitRange{TI<:Integer}}, ::Array{T<:Union{Float32,Float64},1}, ::Union{Range{TI<:Integer},UnitRange{TI<:Integer}}) at linalg\matmul.jl:48
  dot{T<:Union{Complex{Float32},Complex{Float64}},TI<:Integer}(::Array{T<:Union{Complex{Float32},Complex{Float64}},1}, ::Union{Range{TI<:Integer},UnitRange{TI<:Integer}}, ::Array{T<:Union{Complex{Float32},Complex{Float64}},1}, ::Union{Range{TI<:Integer},UnitRange{TI<:Integer}}) at linalg\matmul.jl:61
  ...

julia> 2pi*(0:1)
0.0:6.283185307179586:6.283185307179586

2 个答案:

答案 0 :(得分:4)

dot与乘法(*)不同。您可以输入?dot

来了解它的用途
help?> ⋅
search: ⋅

  dot(x, y)
  ⋅(x,y)

  Compute the dot product. For complex vectors, the first vector is conjugated. [...]

有关点积的详细信息,请参阅例如here

答案 1 :(得分:1)

好像你在混淆两个不同的运营商。 cdot别名dot函数,而星号*别名乘法例程。

我怀疑你想做点积。您看到的错误告诉您Julia不知道如何计算具有整数单位范围(Float64)的标量浮点数(UnitRange{Int})的点积。如果你仔细想想,在这里使用dot毫无意义。

相反,第二个命令2pi*(0:1)计算标量与同一UnitRange个对象的乘积。这简单地重新调整范围,朱莉娅有一个方法来做到这一点。

根据您的目的,您可以选择一些选项:

  1. 在此使用*代替dot(最简单)
  2. 编写您自己的dot方法以处理UnitRange对象的重新缩放(可能没有帮助)
  3. 使用元素乘法.*(小心,不等于dot!)