Skip to content

Commit c0f0e10

Browse files
committed
use gemm instead of matmul
1 parent ce36d85 commit c0f0e10

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

src/stdlib_linalg_pinv.fypp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ submodule(stdlib_linalg) stdlib_linalg_pseudoinverse
3232
${rt}$, allocatable :: u(:,:),vt(:,:)
3333
type(linalg_state_type) :: err0
3434
integer(ilp) :: m,n,k,i,j
35+
${rt}$, parameter :: alpha = 1.0_${rk}$, beta = 0.0_${rk}$
36+
character, parameter :: H = #{if rt.startswith('complex')}# 'C' #{else}# 'T' #{endif}#
3537

3638
! Problem size
3739
m = size(a,1,kind=ilp)
@@ -76,11 +78,7 @@ submodule(stdlib_linalg) stdlib_linalg_pseudoinverse
7678

7779
! 2) commutate matmul: A_pinv = V^H * (U * diag(1/s))^H = ((U * diag(1/s)) * V^H)^H.
7880
! This avoids one matrix transpose
79-
#:if rt.startswith('complex')
80-
pinva = conjg(transpose(matmul(u,vt)))
81-
#:else
82-
pinva = transpose(matmul(u,vt))
83-
#:endif
81+
call gemm(H, H, n, m, k, alpha, vt, k, u, m, beta, pinva, size(pinva,1,kind=ilp))
8482

8583
end subroutine stdlib_linalg_pseudoinvert_${ri}$
8684

0 commit comments

Comments
 (0)