4 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #if defined (_VECTOR_H) && defined (_MATRIX_H)
22 template <typename TYPE>
23 vect<TYPE>::vect(void)
28 template <typename TYPE>
29 vect<TYPE>::vect(const int size)
33 m_vec = new TYPE [m_size]();
36 template <typename TYPE>
37 vect<TYPE>::vect(const int size, TYPE *vec_data)
41 m_vec = new TYPE [m_size];
43 for (int j = 0; j < m_size; j++)
44 m_vec[j] = *vec_data++;
47 template <typename TYPE>
48 vect<TYPE>::vect(const vect<TYPE>& v)
52 m_vec = new TYPE [m_size];
54 for (int q = 0; q < m_size; q++)
55 m_vec[q] = v.m_vec[q];
58 template <typename TYPE>
65 template <typename TYPE>
66 vect<TYPE> vect<TYPE>::operator =(const vect<TYPE>& v)
76 m_vec = new TYPE [m_size];
80 if (m_size != v.m_size)
85 m_vec = new TYPE [m_size];
90 for (int q = 0; q < m_size; q++)
91 m_vec[q] = v.m_vec[q];
97 template <typename TYPE>
98 ostream& operator <<(ostream& dout, vect<TYPE>& v)
100 for (int j = 0; j < v.m_size; j++)
102 dout << v.m_vec[j] << "\t";
110 template <typename T>
111 vect<T> operator +(const vect<T> v1, const vect<T> v2)
113 assert(v1.m_size == v2.m_size);
115 vect<T> v3(v1.m_size);
117 for (int j = 0; j < v1.m_size; j++)
118 v3.m_vec[j] = v1.m_vec[j] + v2.m_vec[j];
123 template <typename T>
124 vect<T> operator +(const vect<T> v, const T val)
126 vect<T> v1(v.m_size);
128 for (int j = 0; j < v.m_size; j++)
129 v1.m_vec[j] = v.m_vec[j] + val;
134 template <typename T>
135 vect<T> operator -(const vect<T> v1, const vect<T> v2)
137 assert(v1.m_size == v2.m_size);
139 vect<T> v3(v1.m_size);
141 for (int j = 0; j < v1.m_size; j++)
142 v3.m_vec[j] = v1.m_vec[j] - v2.m_vec[j];
147 template <typename T>
148 vect<T> operator -(const vect<T> v, const T val)
150 vect<T> v1(v.m_size);
152 for (int j = 0; j < v.m_size; j++)
153 v1.m_vec[j] = v.m_vec[j] - val;
158 template <typename T>
159 matrix<T> operator *(const matrix<T> m, const vect<T> v)
161 assert(m.m_rows == v.m_size);
162 assert(m.m_cols == 1);
164 matrix<T> m1(m.m_rows, v.m_size);
166 for (int i = 0; i < m1.m_rows; i++)
168 for (int j = 0; j < m1.m_cols; j++)
170 m1.m_mat[i][j] = m.m_mat[i][0] * v.m_vec[j];
177 template <typename T>
178 vect<T> operator *(const vect<T> v, const matrix<T> m)
180 assert(m.m_rows == v.m_size);
181 assert(m.m_cols != 1);
183 vect<T> v1(m.m_cols);
185 for (int j = 0; j < m.m_cols; j++)
188 for (int k = 0; k < m.m_rows; k++)
189 v1.m_vec[j] += v.m_vec[k] * m.m_mat[k][j];
195 template <typename T>
196 vect<T> operator *(const vect<T> v, const T val)
198 vect<T> v1(v.m_size);
200 for (int j = 0; j < v.m_size; j++)
201 v1.m_vec[j] = v.m_vec[j] * val;
206 template <typename T>
207 vect<T> operator /(const vect<T> v, const T val)
209 vect<T> v1(v.m_size);
211 for (int j = 0; j < v.m_size; j++)
212 v1.m_vec[j] = v.m_vec[j] / val;
217 template <typename T>
218 bool operator ==(const vect<T> v1, const vect<T> v2)
220 if (v1.m_size == v2.m_size)
222 for (int i = 0; i < v1.m_size; i++)
223 if (v1.m_vec[i] != v2.m_vec[i])
232 template <typename T>
233 bool operator !=(const vect<T> v1, const vect<T> v2)
235 return (!(v1 == v2));
238 template <typename T>
239 matrix<T> transpose(const vect<T> v)
241 matrix<T> m(v.m_size, 1);
243 for (int i = 0; i < v.m_size; i++)
244 m.m_mat[i][0] = v.m_vec[i];
249 template <typename T>
250 vect<T> transpose(const matrix<T> m)
254 for (int i = 0; i < m.m_rows; i++)
255 v.m_vec[i] = m.m_mat[i][0];
260 template <typename T>
261 T mul(const vect<T> v, const matrix<T> m)
263 assert(m.m_rows == v.m_size);
264 assert(m.m_cols == 1);
268 for (int k = 0; k < v.m_size; k++)
269 result += v.m_vec[k] * m.m_mat[k][0];
275 template <typename T>
276 void insert_end(vect<T>& v, T val)
278 for (int i = 0; i < (v.m_size - 1); i++)
279 v.m_vec[i] = v.m_vec[i+1];
281 v.m_vec[v.m_size-1] = val;
284 template <typename T>
285 vect<T> cross(const vect<T> v1, const vect<T> v2)
287 vect<T> v3(v1.m_size);
289 v3.m_vec[0] = ((v1.m_vec[1] * v2.m_vec[2]) - (v1.m_vec[2] * v2.m_vec[1]));
290 v3.m_vec[1] = ((v1.m_vec[2] * v2.m_vec[0]) - (v1.m_vec[0] * v2.m_vec[2]));
291 v3.m_vec[2] = ((v1.m_vec[0] * v2.m_vec[1]) - (v1.m_vec[1] * v2.m_vec[0]));
296 template <typename T>
297 bool is_initialized(const vect<T> v)
299 vect<T> v1(v.m_size);
302 retval = (v == v1) ? false : true;
307 template <typename T>
308 T var(const vect<T> v)
313 for (int i = 0; i < v.m_size; i++)
316 mean = val / v.m_size;
319 for (int i = 0; i < v.m_size; i++)
321 diff = (v.m_vec[i] - mean);
325 var = val / (v.m_size - 1);