After watching Brian Jackson’s talk on JuliaCon 2020 Adventures in Avoiding Allocations, I wanted to try LinearAlgebra.mul!
out. But I’m guessing that I don’t get it as test1
and test2
don’t yield the same result. The problem seem to arise when I want to make the “out” variable of mul!
be a slice. Can I use mul!
to write to an array slice?
julia> import LinearAlgebra
julia> function test1(A, B, n)
Y = Matrix{Float64}(undef, 2, n)
LinearAlgebra.mul!(Y[1, :], A, B)
return Y
end
test1 (generic function with 1 method)
julia> function test2(A, B, n)
Y = Matrix{Float64}(undef, 2, n)
Y[1, :] .= A * B
return Y
end
test2 (generic function with 1 method)
julia> n1 = 2
2
julia> n2 = 3
3
julia> A = rand(n2, n1)
3×2 Matrix{Float64}:
0.425788 0.748112
0.817301 0.299914
0.0576634 0.713061
julia> B = ones(n1)
2-element Vector{Float64}:
1.0
1.0
julia> Y1 = test1(A, B, n2)
2×3 Matrix{Float64}:
8.93663e-316 8.93663e-316 8.93663e-316
8.93663e-316 8.93663e-316 8.93663e-316
julia> Y2 = test2(A, B, n2)
2×3 Matrix{Float64}:
1.1739 1.11721 0.770724
0.0 0.0 0.0
julia> [Y1[1, :] Y2[1, :]]
3×2 Matrix{Float64}:
8.93663e-316 1.1739
8.93663e-316 1.11721
8.93663e-316 0.770724