Commit d299c720a6c7ee6e8015162886ce924d375831bd
1 parent
ff4ee63d
added row and column functions
Showing
1 changed file
with
23 additions
and
0 deletions
Show diff stats
stim/math/matrix.h
@@ -245,6 +245,14 @@ public: | @@ -245,6 +245,14 @@ public: | ||
245 | return a - b; | 245 | return a - b; |
246 | } | 246 | } |
247 | 247 | ||
248 | + /// Sum all elements in the matrix | ||
249 | + T sum() const { | ||
250 | + size_t N = R * C; //calculate the number of elements in the matrix | ||
251 | + T s = (T)0; //allocate a register to store the sum | ||
252 | + for (size_t n = 0; n < N; n++) s += M[n]; //perform the summation | ||
253 | + return s; | ||
254 | + } | ||
255 | + | ||
248 | /// Sort rows of the matrix by the specified indices | 256 | /// Sort rows of the matrix by the specified indices |
249 | matrix<T> sort_rows(size_t* idx) const { | 257 | matrix<T> sort_rows(size_t* idx) const { |
250 | matrix<T> result(C, R); //create the output matrix | 258 | matrix<T> result(C, R); //create the output matrix |
@@ -267,6 +275,21 @@ public: | @@ -267,6 +275,21 @@ public: | ||
267 | return result; | 275 | return result; |
268 | } | 276 | } |
269 | 277 | ||
278 | + /// Return the column specified by index i | ||
279 | + matrix<T> col(size_t i) { | ||
280 | + matrix<T> c(R, 1); //create a single column matrix | ||
281 | + memcpy(c.data(), &data()[R*i], C * sizeof(T)); //copy the column | ||
282 | + return c; | ||
283 | + } | ||
284 | + | ||
285 | + /// Return the row specified by index i | ||
286 | + matrix<T> row(size_t i) { | ||
287 | + matrix<T> r(1, C); //create a single row matrix | ||
288 | + for (size_t c = 0; c < C; c++) | ||
289 | + r(0, c) = at(i, c); | ||
290 | + return r; | ||
291 | + } | ||
292 | + | ||
270 | std::string toStr() const { | 293 | std::string toStr() const { |
271 | std::stringstream ss; | 294 | std::stringstream ss; |
272 | 295 |