Add sum and sum's unit test.
This commit is contained in:
@@ -222,7 +222,7 @@ Matrix Aurora::min(const Matrix &aMatrix, const Matrix &aOther) {
|
||||
Matrix Aurora::max(const Matrix &aMatrix, FunctionDirection direction) {
|
||||
if (aMatrix.getDimSize(2)>1 || aMatrix.isComplex()) {
|
||||
std::cerr
|
||||
<< (aMatrix.getDimSize(2) > 1 ? "min() not support 3D data!" : "min() not support complex value type!")
|
||||
<< (aMatrix.getDimSize(2) > 1 ? "max() not support 3D data!" : "max() not support complex value type!")
|
||||
<< std::endl;
|
||||
return Matrix();
|
||||
}
|
||||
@@ -244,6 +244,7 @@ Matrix Aurora::max(const Matrix &aMatrix, FunctionDirection direction) {
|
||||
return Matrix::New(ret,aMatrix.getDimSize(0),1);
|
||||
}
|
||||
case Column:
|
||||
default:
|
||||
{
|
||||
Eigen::Map<Eigen::MatrixXd> srcMatrix(aMatrix.getData(),aMatrix.getDimSize(0),aMatrix.getDimSize(1));
|
||||
double * ret = malloc(aMatrix.getDimSize(0));
|
||||
@@ -253,3 +254,40 @@ Matrix Aurora::max(const Matrix &aMatrix, FunctionDirection direction) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Matrix Aurora::sum(const Matrix &aMatrix, FunctionDirection direction) {
|
||||
if (aMatrix.getDimSize(2)>1 || aMatrix.isComplex()) {
|
||||
std::cerr
|
||||
<< (aMatrix.getDimSize(2) > 1 ? "sum() not support 3D data!" : "sum() not support complex value type!")
|
||||
<< std::endl;
|
||||
return Matrix();
|
||||
}
|
||||
switch (direction)
|
||||
{
|
||||
case All:
|
||||
{
|
||||
double * ret = malloc(1);
|
||||
ret[0] = cblas_dasum(aMatrix.getDataSize(),aMatrix.getData(),1);
|
||||
return Matrix::New(ret,1);
|
||||
}
|
||||
case Row:
|
||||
{
|
||||
double * ret = malloc(aMatrix.getDimSize(0));
|
||||
for (int i = 0; i < aMatrix.getDimSize(0); ++i) {
|
||||
ret[i] = cblas_dasum(aMatrix.getDimSize(1), aMatrix.getData() + i,
|
||||
aMatrix.getDimSize(0));
|
||||
}
|
||||
return Matrix::New(ret,aMatrix.getDimSize(0),1);
|
||||
}
|
||||
case Column:
|
||||
default:
|
||||
{
|
||||
double * ret = malloc(aMatrix.getDimSize(0));
|
||||
for (int i = 0; i < aMatrix.getDimSize(1); ++i) {
|
||||
ret[i] = cblas_dasum(aMatrix.getDimSize(0), aMatrix.getData()+aMatrix.getDimSize(0)*i,
|
||||
1);
|
||||
}
|
||||
return Matrix::New(ret,1,aMatrix.getDimSize(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user