Fix std and zeros bug.

This commit is contained in:
kradchen
2023-04-27 15:57:03 +08:00
parent 3bd33920f5
commit e9e1bacdc8
3 changed files with 9 additions and 10 deletions

View File

@@ -127,17 +127,19 @@ Matrix Aurora::std(const Matrix &aMatrix) {
Matrix src = aMatrix.isComplex() ? Aurora::abs(aMatrix) : aMatrix; Matrix src = aMatrix.isComplex() ? Aurora::abs(aMatrix) : aMatrix;
int calc_size = src.getDimSize(0) == 1 ? src.getDimSize(1) : src.getDimSize(0); int calc_size = src.getDimSize(0) == 1 ? src.getDimSize(1) : src.getDimSize(0);
int col = src.getDimSize(0) == 1?1:src.getDimSize(1) ; int col = src.getDimSize(0) == 1?1:src.getDimSize(1) ;
double *temp = malloc(aMatrix.getDataSize(), aMatrix.getValueType()==Complex);
cblas_dcopy(aMatrix.getDataSize() * aMatrix.getValueType(),aMatrix.getData(),1,temp,1);
auto std = Aurora::malloc(col); auto std = Aurora::malloc(col);
for (int i = 0; i < col; ++i) { for (int i = 0; i < col; ++i) {
double *p = src.getData() + i * calc_size; double *p = temp + i * calc_size;
double mean = cblas_dasum(calc_size, p, 1) / calc_size; double mean = cblas_dasum(calc_size, p, 1) / calc_size;
vdSubI(calc_size, p, 1, &mean, 0, p, 1); vdSubI(calc_size, p, 1, &mean, 0, p, 1);
vdSqr(calc_size, p, p); vdSqr(calc_size, p, p);
std[i] = cblas_dasum(calc_size, p, 1) / (calc_size - 1); std[i] = cblas_dasum(calc_size, p, 1) / (calc_size - 1);
} }
Aurora::free(temp);
vdSqrt(src.getDimSize(1), std, std); vdSqrt(src.getDimSize(1), std, std);
return Matrix::New(std, 1, col, aMatrix.getDimSize(2)); return Matrix::New(std, 1, col, aMatrix.getDimSize(2));
} }
Matrix Aurora::min(const Matrix &aMatrix, FunctionDirection direction, long& rowIdx, long& colIdx) { Matrix Aurora::min(const Matrix &aMatrix, FunctionDirection direction, long& rowIdx, long& colIdx) {
@@ -391,7 +393,7 @@ Matrix Aurora::mean(const Matrix &aMatrix, FunctionDirection direction, bool aIn
case All: case All:
{ {
Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize()); Eigen::Map<Eigen::VectorXd> srcV(aMatrix.getData(),aMatrix.getDataSize());
double * ret = malloc(1); double * ret = malloc(64);
ret[0] = srcV.array().mean(); ret[0] = srcV.array().mean();
return Matrix::New(ret,1); return Matrix::New(ret,1);
} }

View File

@@ -82,7 +82,7 @@ Matrix Aurora::zeros(int aRow, int aColumn, int aSlice) {
double* data = malloc(arraySize); double* data = malloc(arraySize);
double zero = 0.0; double zero = 0.0;
cblas_dcopy(arraySize,&zero,0,data,1); cblas_dcopy(arraySize,&zero,0,data,1);
return Matrix::New(data,rowSize,colSize,aSlice); return Matrix::New(data,rowSize,colSize,sliceSize);
} }
Matrix Aurora::zeros(int aSquareRow) { Matrix Aurora::zeros(int aSquareRow) {

View File

@@ -12,10 +12,6 @@
#include "Function1D.h" #include "Function1D.h"
#include "Function2D.h" #include "Function2D.h"
#include "Function3D.h" #include "Function3D.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/basic_file_sink.h"
#include "MatlabReader.h" #include "MatlabReader.h"
int main() { int main() {
@@ -23,7 +19,7 @@ int main() {
Input i; Input i;
MatchedFilter o; MatchedFilter o;
m.read(&i,&o,"/mnt/d/TestData/testCreateMatchedFilter.mat"); m.read(&i,&o,"/home/krad/TestData/testCreateMatchedFilter.mat");
bool measuredCEused = true,findDefects = i.mParams->mFindDefects,removeOutliers = i.mRemoveOutliersFromCEMeasured; bool measuredCEused = true,findDefects = i.mParams->mFindDefects,removeOutliers = i.mRemoveOutliersFromCEMeasured;
Aurora::Matrix mFTime = Aurora::Matrix::fromRawData(i.mCe,4000,2304); Aurora::Matrix mFTime = Aurora::Matrix::fromRawData(i.mCe,4000,2304);
@@ -62,7 +58,7 @@ int main() {
sumDiff.getData()[k] = sum(abs(matchedFilter(Aurora::$, k).toMatrix()- maxMatchFilter)).getData()[0]; sumDiff.getData()[k] = sum(abs(matchedFilter(Aurora::$, k).toMatrix()- maxMatchFilter)).getData()[0];
} }
auto indexe = sumDiff > (mean(sumDiff)+2.596 * Aurora::std(sumDiff)); auto indexe = sumDiff > (mean(sumDiff)+2.596 * Aurora::std(sumDiff).getScalar());
for (int l = 0; l < indexe.getDataSize(); ++l) { for (int l = 0; l < indexe.getDataSize(); ++l) {
if ((bool)indexe.getData()[l]){ if ((bool)indexe.getData()[l]){
matchedFilter(Aurora::$,l) = matchedFilter(Aurora::$,minCol); matchedFilter(Aurora::$,l) = matchedFilter(Aurora::$,minCol);
@@ -75,5 +71,6 @@ int main() {
mFTime2 = mFTime2/repmat(sum(Aurora::abs(mFTime2)),mFTime2.getDimSize(0),1); mFTime2 = mFTime2/repmat(sum(Aurora::abs(mFTime2)),mFTime2.getDimSize(0),1);
matchedFilter = fft(mFTime2); matchedFilter = fft(mFTime2);
} }
printf("run end\r\n");
return 0; return 0;
} }