87 |
87 |
88 impl<SM,SV1,M,E> AXPY<E, Vector<E,M,SV1>> for Vector<E,M,SM> |
88 impl<SM,SV1,M,E> AXPY<E, Vector<E,M,SV1>> for Vector<E,M,SM> |
89 where SM: StorageMut<E,M> + Clone, SV1: Storage<E,M> + Clone, |
89 where SM: StorageMut<E,M> + Clone, SV1: Storage<E,M> + Clone, |
90 M : Dim, E : Scalar + Zero + One + Float, |
90 M : Dim, E : Scalar + Zero + One + Float, |
91 DefaultAllocator : Allocator<M> { |
91 DefaultAllocator : Allocator<M> { |
|
92 type Owned = OVector<E, M>; |
92 |
93 |
93 #[inline] |
94 #[inline] |
94 fn axpy<I : Instance<Vector<E,M,SV1>>>(&mut self, α : E, x : I, β : E) { |
95 fn axpy<I : Instance<Vector<E,M,SV1>>>(&mut self, α : E, x : I, β : E) { |
95 x.eval(|x̃| Matrix::axpy(self, α, x̃, β)) |
96 x.eval(|x̃| Matrix::axpy(self, α, x̃, β)) |
96 } |
97 } |
97 |
98 |
98 #[inline] |
99 #[inline] |
99 fn copy_from<I : Instance<Vector<E,M,SV1>>>(&mut self, y : I) { |
100 fn copy_from<I : Instance<Vector<E,M,SV1>>>(&mut self, y : I) { |
100 y.eval(|ỹ| Matrix::copy_from(self, ỹ)) |
101 y.eval(|ỹ| Matrix::copy_from(self, ỹ)) |
|
102 } |
|
103 |
|
104 #[inline] |
|
105 fn set_zero(&mut self) { |
|
106 self.iter_mut().for_each(|e| *e = E::ZERO); |
|
107 } |
|
108 |
|
109 #[inline] |
|
110 fn similar_origin(&self) -> Self::Owned { |
|
111 OVector::zeros_generic(M::from_usize(self.len()), Const) |
101 } |
112 } |
102 } |
113 } |
103 |
114 |
104 /* Implemented automatically as Euclidean. |
115 /* Implemented automatically as Euclidean. |
105 impl<SM,M,E> Projection<E, L2> for Vector<E,M,SM> |
116 impl<SM,M,E> Projection<E, L2> for Vector<E,M,SM> |
189 DefaultAllocator : Allocator<M> { |
200 DefaultAllocator : Allocator<M> { |
190 |
201 |
191 type Output = OVector<E, M>; |
202 type Output = OVector<E, M>; |
192 |
203 |
193 #[inline] |
204 #[inline] |
194 fn similar_origin(&self) -> OVector<E, M> { |
|
195 OVector::zeros_generic(M::from_usize(self.len()), Const) |
|
196 } |
|
197 |
|
198 #[inline] |
|
199 fn norm2_squared(&self) -> E { |
205 fn norm2_squared(&self) -> E { |
200 Vector::<E,M,S>::norm_squared(self) |
206 Vector::<E,M,S>::norm_squared(self) |
201 } |
207 } |
202 |
208 |
203 #[inline] |
209 #[inline] |