53 lines
998 B
C++
53 lines
998 B
C++
#include "matrixdense.h"
|
|
#include "sigmoid.h"
|
|
|
|
MatrixDense::MatrixDense()
|
|
{
|
|
//ctor
|
|
}
|
|
|
|
MatrixDense::MatrixDense(int n, int m)
|
|
{
|
|
nrow = n;
|
|
mcol = m;
|
|
mat = vector<double>(n*m);
|
|
int nm = max(n,m);
|
|
for(int i = 0; i<n; ++i)
|
|
{
|
|
for(int j = 0; j<m; ++j)
|
|
{
|
|
mat[i*m+j] = sigmoid(xk(i,nm))*sigmoid(xk(j,nm));
|
|
}
|
|
}
|
|
}
|
|
|
|
vector<double> MatrixDense::Mult(const vector<double> &x) const
|
|
{
|
|
vector<double> y(nrow,0);
|
|
for(int n=0; n<nrow; ++n)
|
|
{
|
|
for(int m=0; m<mcol; ++m)
|
|
{
|
|
y[n] += mat[n*mcol+m]*x[m];
|
|
}
|
|
}
|
|
return y;
|
|
}
|
|
|
|
vector<double> MatrixDense::MultT(const vector<double> &x) const
|
|
{
|
|
vector<double> y(mcol,0);
|
|
for(int m=0; m<mcol; ++m) // over columns
|
|
{
|
|
for(int n=0; n<nrow; ++n) // over rows
|
|
{
|
|
y[m] += mat[n*mcol+m]*x[n];
|
|
}
|
|
}
|
|
return y;
|
|
}
|
|
|
|
MatrixDense::~MatrixDense()
|
|
{
|
|
//dtor
|
|
}
|