就地元素矩阵乘法又名Schur Product又名Hadamard产品?

Kyl*_*ena 2 linear-algebra julia

我正在寻找Julia中元素矩阵乘法的原位实现,也就是Schur Product又名Hadamard产品.

它可以通过A.*B进行分配来执行,但每次执行此操作时都无法分配额外的内存.

当然我可以自己实现它,但如果它存在,我更喜欢标准实现.

谢谢

Iai*_*ing 6

我不知道就地元素矩阵乘法,我已经很好看,julia/base/*.jl但找不到.我们有就地矩阵乘法(例如A_mul_B!),但更重要的是因为我们可以使用BLAS.元素矩阵乘法不使用BLAS,AFAIK,所以不妨使用你自己的:

function had!{T<:Number}(A::Matrix{T},B::Matrix{T})
    m,n = size(A)
    @assert (m,n) == size(B)
    for j in 1:n
       for i in 1:m
         @inbounds A[i,j] *= B[i,j]
       end
    end
    return A
end
Run Code Online (Sandbox Code Playgroud)

例如

julia> A = rand(2,2)
2x2 Array{Float64,2}:
 0.881304  0.916678
 0.590368  0.630032

julia> B = [2.0 3.0; 4.0 5.0]
2x2 Array{Float64,2}:
 2.0  3.0
 4.0  5.0

julia> had!(A,B);

julia> A
2x2 Array{Float64,2}:
 1.76261  2.75003
 2.36147  3.15016
Run Code Online (Sandbox Code Playgroud)

  • 另一种选择是使用`广播!` - 即使你不需要广播设施也可以正常使用.`直播!(*,A,A,B)` (3认同)