gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:39:34 26 4
gpt4 key购买 nike

我对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com