整数除以Vector是什么?

偶然发现的:

julia> 1 / [1., 2, 3.]
1×3 transpose(::Vector{Float64}) with eltype Float64:
 0.0714286  0.142857  0.214286

这个结果不是太懂

计算伪逆,不过处理 0 会出问题

a = [1, 2]
@show 1 / a * a == 1 # true 
b = [0, 0]
@show 1 / b * b == 1 # false

@edit 1 / a 查看代码:

/(x::Number, v::AbstractVector) = x*pinv(v)
pinv(v::AbstractVector{T}, tol::Real = real(zero(T))) where {T<:Real} = _vectorpinv(transpose, v, tol)
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

附一段 ChatGPT 的解释,自行甄别

这是一个 Julia 函数 _vectorpinv,用于计算一个向量 v 的伪逆。该函数有三个参数:dualfn 是一个作用于向量的函数;v 是一个类型为 Tv 的抽象向量;tol 是一个容差值。
函数首先使用 dualfn 和一个与 v 具有相同长度和元素类型的临时向量计算出一个结果 res。然后,它计算分母 den,即 v 中元素平方的和。
如果 den 为零或者 tol 大于等于1,则将 res 填充为零。否则,res 被设置为将 dualfn 应用于 v,每个元素除以 den 得到的结果。
最后,该函数返回 res,其中包含了 v 的伪逆。

2 个赞