Skip to content

Commit ae27f6f

Browse files
committed
Create generate mod
1 parent 24555e1 commit ae27f6f

File tree

6 files changed

+77
-41
lines changed

6 files changed

+77
-41
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ openblas = ["blas/openblas", "lapack/openblas"]
1515
netlib = ["blas/netlib", "lapack/netlib"]
1616

1717
[dependencies]
18+
rand = "0.3"
1819
derive-new = "0.4"
1920
enum-error-derive = "0.1"
2021
num-traits = "0.1"

src/assert.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::iter::Sum;
44
use num_traits::Float;
55
use ndarray::*;
66

7+
use super::types::*;
78
use super::vector::*;
89

910
pub fn rclose<A, Tol>(test: A, truth: A, rtol: Tol) -> Result<Tol, Tol>

src/generate.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
use ndarray::*;
3+
use rand::*;
4+
use std::ops::*;
5+
6+
use super::types::*;
7+
use super::error::*;
8+
9+
pub fn random_square<A, S>(n: usize) -> ArrayBase<S, Ix2>
10+
where A: Rand,
11+
S: DataOwned<Elem = A>
12+
{
13+
let mut rng = thread_rng();
14+
let v: Vec<A> = (0..n * n).map(|_| rng.gen()).collect();
15+
ArrayBase::from_shape_vec((n, n), v).unwrap()
16+
}
17+
18+
pub fn random_hermite<A, S>(n: usize) -> ArrayBase<S, Ix2>
19+
where A: Rand + Conjugate + Add<Output = A>,
20+
S: DataOwned<Elem = A> + DataMut
21+
{
22+
let mut a = random_square(n);
23+
for i in 0..n {
24+
a[(i, i)] = a[(i, i)] + Conjugate::conj(a[(i, i)]);
25+
for j in i..n {
26+
a[(i, j)] = a[(j, i)];
27+
}
28+
}
29+
a
30+
}
31+
32+
/// construct matrix from diag
33+
pub fn from_diag<A>(d: &[A]) -> Array2<A>
34+
where A: LinalgScalar
35+
{
36+
let n = d.len();
37+
let mut e = Array::zeros((n, n));
38+
for i in 0..n {
39+
e[(i, i)] = d[i];
40+
}
41+
e
42+
}
43+
44+
/// stack vectors into matrix horizontally
45+
pub fn hstack<A, S>(xs: &[ArrayBase<S, Ix1>]) -> Result<Array<A, Ix2>>
46+
where A: LinalgScalar,
47+
S: Data<Elem = A>
48+
{
49+
let views: Vec<_> = xs.iter()
50+
.map(|x| {
51+
let n = x.len();
52+
x.view().into_shape((n, 1)).unwrap()
53+
})
54+
.collect();
55+
stack(Axis(1), &views).map_err(|e| e.into())
56+
}
57+
58+
/// stack vectors into matrix vertically
59+
pub fn vstack<A, S>(xs: &[ArrayBase<S, Ix1>]) -> Result<Array<A, Ix2>>
60+
where A: LinalgScalar,
61+
S: Data<Elem = A>
62+
{
63+
let views: Vec<_> = xs.iter()
64+
.map(|x| {
65+
let n = x.len();
66+
x.view().into_shape((1, n)).unwrap()
67+
})
68+
.collect();
69+
stack(Axis(0), &views).map_err(|e| e.into())
70+
}

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ extern crate blas;
3535
extern crate lapack;
3636
extern crate num_traits;
3737
extern crate num_complex;
38+
extern crate rand;
3839
#[macro_use(s)]
3940
extern crate ndarray;
4041
#[macro_use]
@@ -61,5 +62,6 @@ pub mod square;
6162
pub mod triangular;
6263

6364
pub mod util;
65+
pub mod generate;
6466
pub mod assert;
6567
pub mod prelude;

src/triangular.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use super::impl2::UPLO;
77
use super::matrix::{Matrix, MFloat};
88
use super::square::SquareMatrix;
99
use super::error::LinalgError;
10-
use super::util::hstack;
10+
use super::generate::hstack;
1111
use super::impls::solve::ImplSolve;
1212

1313
pub trait SolveTriangular<Rhs>: Matrix + SquareMatrix {

src/util.rs

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,10 @@
33
use std::iter::Sum;
44
use ndarray::*;
55
use num_traits::Float;
6-
use super::vector::*;
76
use std::ops::Div;
87

9-
/// construct matrix from diag
10-
pub fn from_diag<A>(d: &[A]) -> Array2<A>
11-
where A: LinalgScalar
12-
{
13-
let n = d.len();
14-
let mut e = Array::zeros((n, n));
15-
for i in 0..n {
16-
e[(i, i)] = d[i];
17-
}
18-
e
19-
}
20-
21-
/// stack vectors into matrix horizontally
22-
pub fn hstack<A, S>(xs: &[ArrayBase<S, Ix1>]) -> Result<Array<A, Ix2>, ShapeError>
23-
where A: LinalgScalar,
24-
S: Data<Elem = A>
25-
{
26-
let views: Vec<_> = xs.iter()
27-
.map(|x| {
28-
let n = x.len();
29-
x.view().into_shape((n, 1)).unwrap()
30-
})
31-
.collect();
32-
stack(Axis(1), &views)
33-
}
34-
35-
/// stack vectors into matrix vertically
36-
pub fn vstack<A, S>(xs: &[ArrayBase<S, Ix1>]) -> Result<Array<A, Ix2>, ShapeError>
37-
where A: LinalgScalar,
38-
S: Data<Elem = A>
39-
{
40-
let views: Vec<_> = xs.iter()
41-
.map(|x| {
42-
let n = x.len();
43-
x.view().into_shape((1, n)).unwrap()
44-
})
45-
.collect();
46-
stack(Axis(0), &views)
47-
}
8+
use super::types::*;
9+
use super::vector::*;
4810

4911
pub enum NormalizeAxis {
5012
Row = 0,

0 commit comments

Comments
 (0)