diff --git a/stdlib/LinearAlgebra/src/adjtrans.jl b/stdlib/LinearAlgebra/src/adjtrans.jl index b822be0c6e36d..c91017afb56ba 100644 --- a/stdlib/LinearAlgebra/src/adjtrans.jl +++ b/stdlib/LinearAlgebra/src/adjtrans.jl @@ -242,13 +242,10 @@ Broadcast.broadcast_preserving_zero_d(f, tvs::Union{Number,TransposeAbsVec}...) ## multiplication * # Adjoint/Transpose-vector * vector -*(u::AdjointAbsVec, v::AbstractVector) = dot(u.parent, v) +*(u::AdjointAbsVec{T}, v::AbstractVector{T}) where {T<:Number} = dot(u.parent, v) *(u::TransposeAbsVec{T}, v::AbstractVector{T}) where {T<:Real} = dot(u.parent, v) -function *(u::TransposeAbsVec, v::AbstractVector) - require_one_based_indexing(u, v) - @boundscheck length(u) == length(v) || throw(DimensionMismatch()) - return sum(@inbounds(u[k]*v[k]) for k in 1:length(u)) -end +*(u::AdjOrTransAbsVec, v::AbstractVector) = sum(uu*vv for (uu, vv) in zip(u, v)) + # vector * Adjoint/Transpose-vector *(u::AbstractVector, v::AdjOrTransAbsVec) = broadcast(*, u, v) # Adjoint/Transpose-vector * Adjoint/Transpose-vector diff --git a/stdlib/LinearAlgebra/test/matmul.jl b/stdlib/LinearAlgebra/test/matmul.jl index a607604e56cc7..766c7be26db42 100644 --- a/stdlib/LinearAlgebra/test/matmul.jl +++ b/stdlib/LinearAlgebra/test/matmul.jl @@ -550,7 +550,7 @@ end @test transpose(Xv2)*Xv2 ≈ XtX @test (transpose(Xv3)*Xv3)[1] ≈ XtX @test Xv1'*Xv1 ≈ XcX - @test Xv2'*Xv2 ≈ norm(Xv2)^2 + @test Xv2'*Xv2 ≈ XcX @test (Xv3'*Xv3)[1] ≈ XcX @test (Xv1*transpose(Xv1))[1] ≈ XXt @test Xv2*transpose(Xv2) ≈ XXt