Skip to content

Commit 5d0309e

Browse files
committed
Adds dispatch rules for column vector times transpose(row vector)
Fixes issue JuliaArrays#537
1 parent 53a19c3 commit 5d0309e

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/matrix_multiply.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,18 @@ import LinearAlgebra: BlasFloat, matprod, mul!
1010
@inline *(A::StaticVector, B::StaticMatrix) = *(reshape(A, Size(Size(A)[1], 1)), B)
1111
@inline *(A::StaticVector, B::Transpose{<:Any, <:StaticVector}) = _mul(Size(A), Size(B), A, B)
1212
@inline *(A::StaticVector, B::Adjoint{<:Any, <:StaticVector}) = _mul(Size(A), Size(B), A, B)
13+
@inline *(A::StaticMatrix, B::Adjoint{<:Any, <:StaticVector}) = *(reshape(A, Size(Size(A)[1],)), B)
1314

1415
@inline mul!(dest::StaticVecOrMat, A::StaticMatrix, B::StaticVector) = _mul!(Size(dest), dest, Size(A), Size(B), A, B)
1516
@inline mul!(dest::StaticVecOrMat, A::StaticMatrix, B::StaticMatrix) = _mul!(Size(dest), dest, Size(A), Size(B), A, B)
1617
@inline mul!(dest::StaticVecOrMat, A::StaticVector, B::StaticMatrix) = mul!(dest, reshape(A, Size(Size(A)[1], 1)), B)
1718
@inline mul!(dest::StaticVecOrMat, A::StaticVector, B::Transpose{<:Any, <:StaticVector}) = _mul!(Size(dest), dest, Size(A), Size(B), A, B)
1819
@inline mul!(dest::StaticVecOrMat, A::StaticVector, B::Adjoint{<:Any, <:StaticVector}) = _mul!(Size(dest), dest, Size(A), Size(B), A, B)
19-
20+
@inline mul!(dest::StaticVecOrMat, A::StaticMatrix, B::Adjoint{<:Any, <:StaticVector}) = mul!(dest, reshape(A, Size(Size(A)[1],)), B)
2021
#@inline *{TA<:LinearAlgebra.BlasFloat,Tb}(A::StaticMatrix{TA}, b::StaticVector{Tb})
2122

2223

24+
2325
# Implementations
2426

2527
@generated function _mul(::Size{sa}, a::StaticMatrix{<:Any, <:Any, Ta}, b::AbstractVector{Tb}) where {sa, Ta, Tb}

test/matrix_multiply.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,20 @@ using StaticArrays, Test, LinearAlgebra
7777
@test v4 * transpose(v5) === @SMatrix [3+0im 4+0im; 6+0im 8+0im]
7878
end
7979

80+
@testset "Column vector-vector" begin
81+
cv_array = rand(4,1)
82+
rv_array = rand(4)
83+
a_array = cv_array * rv_array'
84+
85+
cv = SMatrix{4,1}(cv_array)
86+
rv = SVector{4}(rv_array)
87+
@test (cv*rv')::SMatrix a_array
88+
89+
cv = MMatrix{4,1}(cv_array)
90+
rv = MVector{4}(rv_array)
91+
@test (cv*rv')::SMatrix a_array
92+
end
93+
8094
@testset "Matrix-matrix" begin
8195
m = @SMatrix [1 2; 3 4]
8296
n = @SMatrix [2 3; 4 5]

0 commit comments

Comments
 (0)