Add isfinite and isnan and their test.

This commit is contained in:
kradchen
2023-05-16 10:24:09 +08:00
parent b2bacd8894
commit 1a8607eece
3 changed files with 44 additions and 1 deletions

View File

@@ -4,6 +4,7 @@
//必须在Eigen之前
#include "AuroraDefs.h"
#include "Function3D.h"
#include "Matrix.h"
#include <cstddef>
@@ -747,6 +748,22 @@ void Aurora::nantoval(Matrix& aMatrix, double val2) {
srcV = srcV.array().isNaN().select(val2,srcV);
}
Matrix Aurora::isnan(Matrix& aMatrix){
Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize());
auto result = zeros(aMatrix.getDimSize(0),aMatrix.getDimSize(1),aMatrix.getDimSize(2));
Eigen::Map<Eigen::VectorXd> resultV(result.getData(),result.getDataSize());
resultV = srcV.array().isNaN().select(1.0,resultV);
return result;
}
Matrix Aurora::isfinite(Matrix& aMatrix){
Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize());
auto result = zeros(aMatrix.getDimSize(0),aMatrix.getDimSize(1),aMatrix.getDimSize(2));
Eigen::Map<Eigen::VectorXd> resultV(result.getData(),result.getDataSize());
resultV = srcV.array().isFinite().select(1.0,resultV);
return result;
}
void Aurora::padding(Matrix &aMatrix, int aIndex, double aValue)
{
if(aMatrix.isNull() || !aMatrix.isVector())

View File

@@ -2,6 +2,7 @@
#define AURORA_FUNCTION1D_H
#include "Matrix.h"
#include <cmath>
namespace Aurora {
@@ -104,6 +105,11 @@ namespace Aurora {
*/
void nantoval(Matrix& aMatrix,double val);
Matrix isnan(Matrix& aMatrix);
Matrix isfinite(Matrix& aMatrix);
/**
* 使用特定值补齐矩阵,默认为设置原数据矩阵数据到制定长度索引的所有值为制定值
* @attention 直接在原数据上进行修改!