Add padding and test

This commit is contained in:
kradchen
2023-05-06 14:14:46 +08:00
parent 849d0bb961
commit e992606f60
3 changed files with 43 additions and 0 deletions

View File

@@ -633,3 +633,23 @@ void Aurora::nantoval(Matrix& aMatrix, double val2) {
Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize()); Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize());
srcV = srcV.array().isNaN().select(val2,srcV); 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"<<std::endl;
return;
}
if (aMatrix.getDataSize()>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());
}

View File

@@ -96,7 +96,22 @@ namespace Aurora {
*/ */
Matrix polyval(const Matrix& aP, const Matrix& aX); Matrix polyval(const Matrix& aP, const Matrix& aX);
/**
* 将所有nan值设置为特定值
* @attention 直接在原数据上进行修改!
* @param aMatrix 向量
* @param val 指定值
*/
void nantoval(Matrix& aMatrix,double val); void nantoval(Matrix& aMatrix,double val);
/**
* 使用特定值补齐矩阵,默认为设置原数据矩阵数据到制定长度索引的所有值为制定值
* @attention 直接在原数据上进行修改!
* @param aMatrix 向量
* @param aIndex 长度索引
* @param aValue 指定值
*/
void padding(Matrix& aMatrix, int aIndex, double aValue);
}; };

View File

@@ -493,3 +493,11 @@ TEST_F(Function1D_Test, reshape) {
EXPECT_DOUBLE_AE(result.getDimSize(1),3); EXPECT_DOUBLE_AE(result.getDimSize(1),3);
EXPECT_DOUBLE_AE(result.getDimSize(2),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();
}