3/[2;2]
给
1×2 LinearAlgebra.Transpose{Float64,Array{Float64,1}}:
0.75 0.75
而3 ./[2;2]
给
2-element Array{Float64,1}:
1.5
1.5
二是容易理解。它播放3
和执行单元方式划分。但是,什么是具有表现为它做的第一操作背后的原因何在呢?我假定它采取了载体,其是2×1的总和,由4执行的3分割,并将其广播到1×2转置矢量。我可以接受以矢量的总和来进行划分,但为什么转?或者为什么不直接返回一个标?
它只是给了右侧操作数的伪逆。
julia> ?/
...
Right division operator: multiplication of x by the inverse of y on the right.
虽然它似乎一见钟情不足为奇,它实际上是自然的行为。甲rowvector * columnvector给出了一个标量,并因此由列向量划分应该给一个行向量,它是的情况下的标量。需要注意的是RowVector
已在1.0被删除,你得到的其实是Transpose
代表的行向量。
你可以写@less 1 / [2;2]
,看看到底发生了什么。
也看看this GitHub issue来了解一些使用情况下的行为更多的和this discourse topic。
这似乎是计算pseudoinverse of the vector,然后乘以3。
使用@which 3/[2;2]
等等,看看到底发生了什么,我发现,它最终调用stdlib/LinearAlgebra/generic.jl
下面的方法:
function _vectorpinv(dualfn::Tf, v::AbstractVector{Tv}, tol) where {Tv,Tf}
res = dualfn(similar(v, typeof(zero(Tv) / (abs2(one(Tv)) + abs2(one(Tv))))))
den = sum(abs2, v)
# as tol is the threshold relative to the maximum singular value, for a vector with
# single singular value σ=√den, σ ≦ tol*σ is equivalent to den=0 ∨ tol≥1
if iszero(den) || tol >= one(tol)
fill!(res, zero(eltype(res)))
else
res .= dualfn(v) ./ den
end
return res
end
这在给定的情况下,有效地变成transpose([2;2])/sum(abs2, [2;2])
这是伪逆。
然而,这是一个有点在我头上。因此,有人更合格的会证明我错了。