1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#[allow(unused_imports)]
use structure::matrix::*;
#[allow(unused_imports)]
use structure::vector::*;
#[allow(unused_imports)]
use statistics::stat::*;
use std::convert::Into;
pub fn seq<S,T,U>(start: S, end: T, step: U) -> Vector
where S: Into<f64> + Copy,
T: Into<f64> + Copy,
U: Into<f64> + Copy {
let s = start.into();
let e = end.into();
let step = step.into();
assert!(e > s);
let factor: f64 = (e - s) / step;
let l: usize = factor as usize + 1;
let mut v: Vec<f64> = Vec::new();
for i in 0 .. l {
v.push(s + step * (i as f64));
}
v
}
pub fn zeros(r: usize, c: usize) -> Matrix {
matrix(vec![0f64; r * c], r, c, Row)
}
pub fn concat<T: Clone + Copy + Default>(v1: Vec<T>, v2: Vec<T>) -> Vec<T> {
let l1 = v1.len();
let l2 = v2.len();
let mut v = vec![Default::default(); l1 + l2];
for i in 0 .. l1 {
v[i] = v1[i];
}
for i in 0 .. l2 {
v[i + l1] = v2[i];
}
v
}
pub fn cat<T: Clone + Copy + Default>(val: T, vec: Vec<T>) -> Vec<T> {
let l = vec.len();
let mut v = vec![Default::default(); l + 1];
v[0] = val;
for i in 0 .. l {
v[i+1] = vec[i];
}
v
}
pub fn eye(n: usize) -> Matrix {
let mut m = zeros(n, n);
for i in 0 .. n {
m[(i, i)] = 1f64;
}
m
}
pub fn cbind(m1: Matrix, m2: Matrix) -> Matrix {
let mut temp = m1;
if temp.shape != Col {
temp = temp.change_shape();
}
let mut v = temp.data;
let mut c = temp.col;
let r = temp.row;
assert_eq!(r, m2.row);
v.extend(&m2.data.clone());
c += m2.col;
matrix(v, r, c, Col)
}