From e992606f60f79e65d9b10ca50030f249e08bb1a5 Mon Sep 17 00:00:00 2001 From: kradchen Date: Sat, 6 May 2023 14:14:46 +0800 Subject: [PATCH] Add padding and test --- src/Function1D.cpp | 20 ++++++++++++++++++++ src/Function1D.h | 15 +++++++++++++++ test/Function1D_Test.cpp | 8 ++++++++ 3 files changed, 43 insertions(+) diff --git a/src/Function1D.cpp b/src/Function1D.cpp index 8a2368c..ecf21b8 100644 --- a/src/Function1D.cpp +++ b/src/Function1D.cpp @@ -633,3 +633,23 @@ void Aurora::nantoval(Matrix& aMatrix, double val2) { Eigen::Map srcV(aMatrix.getData(),aMatrix.getDataSize()); srcV = srcV.array().isNaN().select(val2,srcV); } + +void Aurora::padding(Matrix &aMatrix, int aIndex, double aValue) +{ + if(aMatrix.isNull() || !aMatrix.isVector()) + { + std::cerr<<"padding only support vector"<aIndex){ + aMatrix.getData()[aIndex] = aValue; + return; + } + int size = (aIndex+1); + double* newData = malloc(size,aMatrix.isComplex()); + cblas_dcopy(aMatrix.getDataSize()*aMatrix.getValueType(), + aMatrix.getData(),1,newData,1); + cblas_dcopy((size-aMatrix.getDataSize())*aMatrix.getValueType(), + &aValue,0,newData+aMatrix.getDataSize()*aMatrix.getValueType(),1); + aMatrix = Matrix::New(newData,size,1,1,aMatrix.getValueType()); +} diff --git a/src/Function1D.h b/src/Function1D.h index 4f40fa8..94b2f64 100644 --- a/src/Function1D.h +++ b/src/Function1D.h @@ -96,7 +96,22 @@ namespace Aurora { */ Matrix polyval(const Matrix& aP, const Matrix& aX); + /** + * 将所有nan值设置为特定值 + * @attention 直接在原数据上进行修改! + * @param aMatrix 向量 + * @param val 指定值 + */ void nantoval(Matrix& aMatrix,double val); + + /** + * 使用特定值补齐矩阵,默认为设置原数据矩阵数据到制定长度索引的所有值为制定值 + * @attention 直接在原数据上进行修改! + * @param aMatrix 向量 + * @param aIndex 长度索引 + * @param aValue 指定值 + */ + void padding(Matrix& aMatrix, int aIndex, double aValue); }; diff --git a/test/Function1D_Test.cpp b/test/Function1D_Test.cpp index 8e16f9b..6fae939 100644 --- a/test/Function1D_Test.cpp +++ b/test/Function1D_Test.cpp @@ -493,3 +493,11 @@ TEST_F(Function1D_Test, reshape) { EXPECT_DOUBLE_AE(result.getDimSize(1),3); EXPECT_DOUBLE_AE(result.getDimSize(2),3); } + +TEST_F(Function1D_Test, padding) { + double *input = new double[18]{10,2,1,3,4,4,16,3,1,2,15,-2,1,-3,4,-4,1,-3}; + auto ma = Aurora::Matrix::fromRawData(input,18,1,1); + Aurora::padding(ma,20,1); + auto result = ma.getData(); + +}