julia - 为什么加号运算符在 Julia 中被矢量化而不是除法运算符?

标签 julia

我对 Julia 很陌生,我对 Julia 中的矢量化操作很好奇。
例子:

x = [2 3 4]
y = [3 4 5]
如果我运行上面的:
x + y
我得到:
1×3 Array{Int64,2}:
 5  7  9
但如果我这样做:
x/y
我得到:
1×1 Array{Float64,2}:
 0.7600000000000002
我无法理解,经过一些研究,我发现 x./y 是进行矢量化操作的正确方法,但我想知道加号是如何工作的。
这是我的问题:
这背后的直觉是什么(使加号矢量化而不是除法运算符)?
当我做 x/y 时会发生什么?为什么 .76000 会作为答案出现。
我希望这不是重复的,如果是请告诉我。我要把它去掉。首先十分感谢。请帮忙。

最佳答案

AFAICT + 操作符不会自动广播:

julia> 1 + [2, 3]
ERROR: MethodError: no method matching +(::Int64, ::Array{Int64,1})
For element-wise addition, use broadcasting with dot syntax: scalar .+ array

julia> [1 2] + [3, 4]
ERROR: DimensionMismatch("dimensions must match: a has dims (Base.OneTo(1), Base.OneTo(2)), b has dims (Base.OneTo(2),), mismatch at 1")
你必须分别写:
julia> 1 .+ [2, 3]
2-element Array{Int64,1}:
 3
 4

julia> [1 2] .+ [3, 4]
2×2 Array{Int64,2}:
 4  5
 5  6
然而,重要的是 + 对于完全相同维度的数组是一个有效的操作(在数学意义上),这就是为什么它有效:
julia> [2 3 4] + [3 4 5]
1×3 Array{Int64,2}:
 5  7  9
请注意,这不是广播,而只是线性代数。
现在关于 x / y 您可以检查它是否定义为:
help?>  x / y
  /(x, y)

  Right division operator: multiplication of x by the inverse of y on the right.
所以你有了:
julia> using LinearAlgebra

julia> x * pinv(y)
1×1 Array{Float64,2}:
 0.7600000000000005
(实际的实现有点不同——我在这里使用了一种简化的方法)

关于julia - 为什么加号运算符在 Julia 中被矢量化而不是除法运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65214708/

相关文章:

julia - 如何在 Flux.jl 中使用 .pth 模型?

windows - 如何解决 Windows 上 Julia 中的包安装错误?

julia @printf 改变我的变量

arrays - 将一维对象数组(复合类型)转换为二维数组

julia - 有关 Windows 上 Julia 的几个基本问​​题

Julia :LoadError:MethodError: `call` 没有与 call(::Array{Float64,1},::Int64) 匹配的方法

julia - 如何使用 Plots.jl 在 Julia 中显示绘图?

graph - 如何在 JULIA 中使用 GADFLY 实现直方图绘制的精度

julia - not 运算符 (!) 不适用于数组广播

open-source - 编辑源代码(并重新编译?) julia 包