@@ -6,12 +6,11 @@ use ndarray::DataMut;
6
6
use lapack:: c:: Layout ;
7
7
8
8
use super :: error:: { LinalgError , StrideError } ;
9
- use super :: impls:: qr:: ImplQR ;
10
9
use super :: impls:: svd:: ImplSVD ;
11
10
use super :: impls:: solve:: ImplSolve ;
12
11
13
- pub trait MFloat : ImplQR + ImplSVD + ImplSolve + NdFloat { }
14
- impl < A : ImplQR + ImplSVD + ImplSolve + NdFloat > MFloat for A { }
12
+ pub trait MFloat : ImplSVD + ImplSolve + NdFloat { }
13
+ impl < A : ImplSVD + ImplSolve + NdFloat > MFloat for A { }
15
14
16
15
/// Methods for general matrices
17
16
pub trait Matrix : Sized {
@@ -24,8 +23,6 @@ pub trait Matrix: Sized {
24
23
fn layout ( & self ) -> Result < Layout , StrideError > ;
25
24
/// singular-value decomposition (SVD)
26
25
fn svd ( self ) -> Result < ( Self , Self :: Vector , Self ) , LinalgError > ;
27
- /// QR decomposition
28
- fn qr ( self ) -> Result < ( Self , Self ) , LinalgError > ;
29
26
/// LU decomposition
30
27
fn lu ( self ) -> Result < ( Self :: Permutator , Self , Self ) , LinalgError > ;
31
28
/// permutate matrix (inplace)
@@ -89,37 +86,6 @@ impl<A: MFloat> Matrix for Array<A, Ix2> {
89
86
Layout :: ColumnMajor => Ok ( ( ua. reversed_axes ( ) , sv, va. reversed_axes ( ) ) ) ,
90
87
}
91
88
}
92
- fn qr ( self ) -> Result < ( Self , Self ) , LinalgError > {
93
- let ( n, m) = self . size ( ) ;
94
- let strides = self . strides ( ) ;
95
- let k = min ( n, m) ;
96
- let layout = self . layout ( ) ?;
97
- let ( q, r) = ImplQR :: qr ( layout, m, n, self . clone ( ) . into_raw_vec ( ) ) ?;
98
- let ( qa, ra) = if strides[ 0 ] < strides[ 1 ] {
99
- ( Array :: from_vec ( q) . into_shape ( ( m, n) ) . unwrap ( ) . reversed_axes ( ) ,
100
- Array :: from_vec ( r) . into_shape ( ( m, n) ) . unwrap ( ) . reversed_axes ( ) )
101
- } else {
102
- ( Array :: from_vec ( q) . into_shape ( ( n, m) ) . unwrap ( ) , Array :: from_vec ( r) . into_shape ( ( n, m) ) . unwrap ( ) )
103
- } ;
104
- let qm = if m > k {
105
- let ( qsl, _) = qa. view ( ) . split_at ( Axis ( 1 ) , k) ;
106
- qsl. to_owned ( )
107
- } else {
108
- qa
109
- } ;
110
- let mut rm = if n > k {
111
- let ( rsl, _) = ra. view ( ) . split_at ( Axis ( 0 ) , k) ;
112
- rsl. to_owned ( )
113
- } else {
114
- ra
115
- } ;
116
- for ( ( i, j) , val) in rm. indexed_iter_mut ( ) {
117
- if i > j {
118
- * val = A :: zero ( ) ;
119
- }
120
- }
121
- Ok ( ( qm, rm) )
122
- }
123
89
fn lu ( self ) -> Result < ( Self :: Permutator , Self , Self ) , LinalgError > {
124
90
let ( n, m) = self . size ( ) ;
125
91
let k = min ( n, m) ;
@@ -167,10 +133,6 @@ impl<A: MFloat> Matrix for RcArray<A, Ix2> {
167
133
let ( u, s, v) = self . into_owned ( ) . svd ( ) ?;
168
134
Ok ( ( u. into_shared ( ) , s. into_shared ( ) , v. into_shared ( ) ) )
169
135
}
170
- fn qr ( self ) -> Result < ( Self , Self ) , LinalgError > {
171
- let ( q, r) = self . into_owned ( ) . qr ( ) ?;
172
- Ok ( ( q. into_shared ( ) , r. into_shared ( ) ) )
173
- }
174
136
fn lu ( self ) -> Result < ( Self :: Permutator , Self , Self ) , LinalgError > {
175
137
let ( p, l, u) = self . into_owned ( ) . lu ( ) ?;
176
138
Ok ( ( p, l. into_shared ( ) , u. into_shared ( ) ) )
0 commit comments