|
1 | 1 | //! Eigenvalue decomposition for general matrices |
2 | 2 |
|
3 | | -use crate::{error::*, layout::MatrixLayout}; |
| 3 | +use crate::{error::*, layout::MatrixLayout, *}; |
4 | 4 | use cauchy::*; |
5 | 5 | use num_traits::{ToPrimitive, Zero}; |
6 | 6 |
|
@@ -33,16 +33,16 @@ macro_rules! impl_eig_complex { |
33 | 33 | } else { |
34 | 34 | (b'N', b'N') |
35 | 35 | }; |
36 | | - let mut eigs = vec![Self::Complex::zero(); n as usize]; |
37 | | - let mut rwork = vec![Self::Real::zero(); 2 * n as usize]; |
| 36 | + let mut eigs = unsafe { vec_uninit(n as usize) }; |
| 37 | + let mut rwork = unsafe { vec_uninit(2 * n as usize) }; |
38 | 38 |
|
39 | 39 | let mut vl = if jobvl == b'V' { |
40 | | - Some(vec![Self::Complex::zero(); (n * n) as usize]) |
| 40 | + Some(unsafe { vec_uninit((n * n) as usize) }) |
41 | 41 | } else { |
42 | 42 | None |
43 | 43 | }; |
44 | 44 | let mut vr = if jobvr == b'V' { |
45 | | - Some(vec![Self::Complex::zero(); (n * n) as usize]) |
| 45 | + Some(unsafe { vec_uninit((n * n) as usize) }) |
46 | 46 | } else { |
47 | 47 | None |
48 | 48 | }; |
@@ -72,7 +72,7 @@ macro_rules! impl_eig_complex { |
72 | 72 |
|
73 | 73 | // actal ev |
74 | 74 | let lwork = work_size[0].to_usize().unwrap(); |
75 | | - let mut work = vec![Self::zero(); lwork]; |
| 75 | + let mut work = unsafe { vec_uninit(lwork) }; |
76 | 76 | unsafe { |
77 | 77 | $ev( |
78 | 78 | jobvl, |
@@ -128,16 +128,16 @@ macro_rules! impl_eig_real { |
128 | 128 | } else { |
129 | 129 | (b'N', b'N') |
130 | 130 | }; |
131 | | - let mut eig_re = vec![Self::zero(); n as usize]; |
132 | | - let mut eig_im = vec![Self::zero(); n as usize]; |
| 131 | + let mut eig_re = unsafe { vec_uninit(n as usize) }; |
| 132 | + let mut eig_im = unsafe { vec_uninit(n as usize) }; |
133 | 133 |
|
134 | 134 | let mut vl = if jobvl == b'V' { |
135 | | - Some(vec![Self::zero(); (n * n) as usize]) |
| 135 | + Some(unsafe { vec_uninit((n * n) as usize) }) |
136 | 136 | } else { |
137 | 137 | None |
138 | 138 | }; |
139 | 139 | let mut vr = if jobvr == b'V' { |
140 | | - Some(vec![Self::zero(); (n * n) as usize]) |
| 140 | + Some(unsafe { vec_uninit((n * n) as usize) }) |
141 | 141 | } else { |
142 | 142 | None |
143 | 143 | }; |
@@ -167,7 +167,7 @@ macro_rules! impl_eig_real { |
167 | 167 |
|
168 | 168 | // actual ev |
169 | 169 | let lwork = work_size[0].to_usize().unwrap(); |
170 | | - let mut work = vec![Self::zero(); lwork]; |
| 170 | + let mut work = unsafe { vec_uninit(lwork) }; |
171 | 171 | unsafe { |
172 | 172 | $ev( |
173 | 173 | jobvl, |
@@ -219,7 +219,7 @@ macro_rules! impl_eig_real { |
219 | 219 | // ``` |
220 | 220 | let n = n as usize; |
221 | 221 | let v = vr.or(vl).unwrap(); |
222 | | - let mut eigvecs = vec![Self::Complex::zero(); n * n]; |
| 222 | + let mut eigvecs = unsafe { vec_uninit(n * n) }; |
223 | 223 | let mut is_conjugate_pair = false; // flag for check `j` is complex conjugate |
224 | 224 | for j in 0..n { |
225 | 225 | if eig_im[j] == 0.0 { |
|
0 commit comments