Add transpose and transpose's unittest.
This commit is contained in:
@@ -462,3 +462,29 @@ double Aurora::norm(const Matrix& aMatrix, NormMethod aNormMethod)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Matrix Aurora::transpose(const Matrix& aMatrix)
|
||||||
|
{
|
||||||
|
//not surpport for 3 dims.
|
||||||
|
if(aMatrix.isNull() || aMatrix.getDimSize(2) > 1)
|
||||||
|
{
|
||||||
|
return Matrix();
|
||||||
|
}
|
||||||
|
size_t size = aMatrix.getDataSize();
|
||||||
|
int row = aMatrix.getDimSize(0);
|
||||||
|
int col = aMatrix.getDimSize(1);
|
||||||
|
double* resultData;
|
||||||
|
double* data = aMatrix.getData();
|
||||||
|
if(aMatrix.isComplex())
|
||||||
|
{
|
||||||
|
resultData = Aurora::malloc(size, true);
|
||||||
|
mkl_zomatcopy('C', 'T',row ,col, 1.0, (MKL_Complex16*)data, row, (MKL_Complex16*)resultData, col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resultData = Aurora::malloc(size);
|
||||||
|
mkl_domatcopy('C', 'T',row ,col, 1.0, data, row, resultData, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Matrix::New(resultData,col,row,1,aMatrix.getValueType());
|
||||||
|
}
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ namespace Aurora {
|
|||||||
|
|
||||||
double norm(const Matrix& aMatrix, NormMethod aNormMethod);
|
double norm(const Matrix& aMatrix, NormMethod aNormMethod);
|
||||||
|
|
||||||
|
Matrix transpose(const Matrix& aMatrix);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 多项式计算
|
* 多项式计算
|
||||||
* @brief 例如p[1 0 1],x[3 2 5],代表对多项式 y = x^2 + 1 求(x=3, x=2, x=5)时所有的y
|
* @brief 例如p[1 0 1],x[3 2 5],代表对多项式 y = x^2 + 1 求(x=3, x=2, x=5)时所有的y
|
||||||
|
|||||||
@@ -308,3 +308,37 @@ TEST_F(Function1D_Test, norm) {
|
|||||||
result = Aurora::norm(matrix,Aurora::NormMethod::NormF);
|
result = Aurora::norm(matrix,Aurora::NormMethod::NormF);
|
||||||
EXPECT_DOUBLE_AE(result,27.4089);
|
EXPECT_DOUBLE_AE(result,27.4089);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(Function1D_Test, transpose) {
|
||||||
|
double *data = new double[6]{1,2,3,4,5,6};
|
||||||
|
auto matrix = Aurora::Matrix::fromRawData(data, 3,2);
|
||||||
|
auto result = Aurora::transpose(matrix);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[0],1);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[1],4);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[2],2);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[3],5);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[4],3);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[5],6);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(0),2);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(1),3);
|
||||||
|
|
||||||
|
data = new double[12]{1,2,3,4,5,6,7,8,9,10,11,12};
|
||||||
|
matrix = Aurora::Matrix::fromRawData(data, 3,2,1,Aurora::Complex);
|
||||||
|
result = Aurora::transpose(matrix);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[0],1);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[1],2);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[2],7);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[3],8);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[4],3);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[5],4);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[6],9);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[7],10);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[8],5);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[9],6);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[10],11);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getData()[11],12);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(0),2);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(1),3);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(0),2);
|
||||||
|
EXPECT_DOUBLE_EQ(result.getDimSize(1),3);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user