Skip to content

Commit 0a6f959

Browse files
committed
Remove old QR
1 parent a83df31 commit 0a6f959

File tree

3 files changed

+5
-43
lines changed

3 files changed

+5
-43
lines changed

src/matrix.rs

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ use ndarray::DataMut;
66
use lapack::c::Layout;
77

88
use super::error::{LinalgError, StrideError};
9-
use super::impls::qr::ImplQR;
109
use super::impls::svd::ImplSVD;
1110
use super::impls::solve::ImplSolve;
1211

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 {}
1514

1615
/// Methods for general matrices
1716
pub trait Matrix: Sized {
@@ -24,8 +23,6 @@ pub trait Matrix: Sized {
2423
fn layout(&self) -> Result<Layout, StrideError>;
2524
/// singular-value decomposition (SVD)
2625
fn svd(self) -> Result<(Self, Self::Vector, Self), LinalgError>;
27-
/// QR decomposition
28-
fn qr(self) -> Result<(Self, Self), LinalgError>;
2926
/// LU decomposition
3027
fn lu(self) -> Result<(Self::Permutator, Self, Self), LinalgError>;
3128
/// permutate matrix (inplace)
@@ -89,37 +86,6 @@ impl<A: MFloat> Matrix for Array<A, Ix2> {
8986
Layout::ColumnMajor => Ok((ua.reversed_axes(), sv, va.reversed_axes())),
9087
}
9188
}
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-
}
12389
fn lu(self) -> Result<(Self::Permutator, Self, Self), LinalgError> {
12490
let (n, m) = self.size();
12591
let k = min(n, m);
@@ -167,10 +133,6 @@ impl<A: MFloat> Matrix for RcArray<A, Ix2> {
167133
let (u, s, v) = self.into_owned().svd()?;
168134
Ok((u.into_shared(), s.into_shared(), v.into_shared()))
169135
}
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-
}
174136
fn lu(self) -> Result<(Self::Permutator, Self, Self), LinalgError> {
175137
let (p, l, u) = self.into_owned().lu()?;
176138
Ok((p, l.into_shared(), u.into_shared()))

src/traits.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl<A, S> OperationNorm for ArrayBase<S, Ix2>
3737
}
3838

3939
pub trait QR<Q, R> {
40-
fn qr2(self) -> Result<(Q, R)>;
40+
fn qr(self) -> Result<(Q, R)>;
4141
}
4242

4343
impl<A, S, Sq, Sr> QR<ArrayBase<Sq, Ix2>, ArrayBase<Sr, Ix2>> for ArrayBase<S, Ix2>
@@ -46,7 +46,7 @@ impl<A, S, Sq, Sr> QR<ArrayBase<Sq, Ix2>, ArrayBase<Sr, Ix2>> for ArrayBase<S, I
4646
Sq: DataOwned<Elem = A> + DataMut,
4747
Sr: DataOwned<Elem = A> + DataMut
4848
{
49-
fn qr2(mut self) -> Result<(ArrayBase<Sq, Ix2>, ArrayBase<Sr, Ix2>)> {
49+
fn qr(mut self) -> Result<(ArrayBase<Sq, Ix2>, ArrayBase<Sr, Ix2>)> {
5050
let n = self.rows();
5151
let m = self.cols();
5252
let k = ::std::cmp::min(n, m);

tests/qr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fn $funcname() {
1010
let a = $random($n, $m, $t);
1111
let ans = a.clone();
1212
println!("a = \n{:?}", &a);
13-
let (q, r) : (Array2<_>, Array2<_>) = a.qr2().unwrap();
13+
let (q, r) : (Array2<_>, Array2<_>) = a.qr().unwrap();
1414
println!("q = \n{:?}", &q);
1515
println!("r = \n{:?}", &r);
1616
assert_close_l2!(&q.t().dot(&q), &Array::eye(min($n, $m)), 1e-7);

0 commit comments

Comments
 (0)