22 template<
class T,
size_t NumberOfRows,
size_t NumberOfColumns>
30 for (
size_t column = 0; column < NumberOfColumns; ++column) {
31 for (
size_t row = 0; row < NumberOfRows; ++row) {
32 data[column][row] = T(0);
39 assert(row < NumberOfRows);
40 assert(column < NumberOfColumns);
41 return data[column][row];
46 assert(row < NumberOfRows);
47 assert(column < NumberOfColumns);
48 return data[column][row];
54 template<
class VectorType>
57 "Matrix-Vector multiplication only supported for quadratic matrices.");
59 "Matrix vector multiplication given wrong dimensions");
63 for (
size_t column = 0; column < NumberOfColumns; ++column) {
64 for (
size_t row = 0; row < NumberOfRows; ++row) {
65 product[row] += (*this)(row, column) * vector[column];
75 "Matrix-Matrix multiplication only supported for quadratic matrices.");
79 for (
size_t row = 0; row < NumberOfRows; ++row) {
80 for (
size_t column = 0; column < NumberOfColumns; ++column) {
81 for (
size_t i = 0; i < NumberOfRows; ++i) {
82 product(row, column) += (*this)(row, i) *
matrix(i, column);
94 for (
size_t column = 0; column < NumberOfColumns; ++column) {
95 for (
size_t row = 0; row < NumberOfRows; ++row) {
96 transposedMatrix(column, row) = (*this)(row, column);
100 return transposedMatrix;
107 for (
size_t column = 0; column < NumberOfColumns; ++column) {
110 for (
size_t row = 0; row < NumberOfRows; ++row) {
111 norm += (*this)(row, column) * (*
this)(row, column);
116 for (
size_t row = 0; row < NumberOfRows; ++row) {
117 newMatrix(row, column) = (*this)(row, column) / norm;
126 "Matrix-Vector multiplication only supported for quadratic matrices.");
129 for (
size_t i = 0; i < NumberOfColumns; ++i) {
130 identityMatrix(i, i) = 1;
133 return identityMatrix;
137 std::stringstream ss;
139 for (
size_t i = 0; i < NumberOfRows; ++i) {
140 for (
size_t j = 0; j < NumberOfColumns; ++j) {
143 if (j < NumberOfColumns - 1) {
154 T data[NumberOfColumns][NumberOfRows];
160 template<
class T,
size_t NumberOfRows,
size_t NumberOfColumns>
164 os <<
"[" << std::endl;
166 for (
size_t i = 0; i < NumberOfRows; ++i) {
167 for (
size_t j = 0; j < NumberOfColumns; ++j) {
170 if (j < NumberOfColumns - 1) {
static __device__ __host__ matrix< T, NumberOfColumns, NumberOfRows > identity()
Definition: mat.hpp:124
__device__ __host__ matrix< T, NumberOfColumns, NumberOfRows > transposed() const
Definition: mat.hpp:90
__device__ __host__ VectorType operator*(const VectorType &vector) const
Definition: mat.hpp:55
#define __host__
Definition: types.hpp:46
std::ostream & operator<<(std::ostream &os, const alsutils::matrix< T, NumberOfRows, NumberOfColumns > &mat)
Definition: mat.hpp:161
matrix< T, NumberOfRows, NumberOfColumns > self_type
Definition: mat.hpp:26
__device__ __host__ const T & operator()(size_t row, size_t column) const
Get the matrix element at the given row and column.
Definition: mat.hpp:38
__device__ __host__ matrix()
Creates a matrix initialized to 0.
Definition: mat.hpp:28
__device__ __host__ matrix< T, NumberOfColumns, NumberOfRows > normalized() const
Definition: mat.hpp:103
Various utilities for mpi and cuda.
Definition: Factory.hpp:3
__host__ std::string str() const
Definition: mat.hpp:136
#define static_assert(x, y)
Definition: types.hpp:52
#define __device__
Definition: types.hpp:45
__device__ __host__ T & operator()(size_t row, size_t column)
Get the matrix element at the given row and column.
Definition: mat.hpp:45
__device__ __host__ self_type operator*(const self_type &matrix) const
Definition: mat.hpp:73