From abe69eb26d932cb6c114f6268ecdaf71a0aad710 Mon Sep 17 00:00:00 2001 From: sunwen Date: Wed, 26 Apr 2023 16:43:09 +0800 Subject: [PATCH] Add intersect and intersect's unittest. --- src/Function1D.cpp | 52 +++++++++++++++++++++++++++++++++++++++- src/Function1D.h | 8 +++++++ test/Function1D_Test.cpp | 21 ++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/Function1D.cpp b/src/Function1D.cpp index c1f9623..a620f68 100644 --- a/src/Function1D.cpp +++ b/src/Function1D.cpp @@ -553,7 +553,7 @@ Matrix Aurora::linspace(double aStart, double aEnd, int aNum) Matrix Aurora::auroraUnion(const Matrix& aMatrix1, const Matrix& aMatrix2) { - if(aMatrix1.isNull() || aMatrix2.isNull() || aMatrix1.getValueType() == Complex || aMatrix2.getValueType() == Complex) + if(aMatrix1.isNull() || aMatrix2.isNull() || aMatrix1.isComplex() || aMatrix2.isComplex()) { return Matrix(); } @@ -572,3 +572,53 @@ Matrix Aurora::auroraUnion(const Matrix& aMatrix1, const Matrix& aMatrix2) return Matrix::copyFromRawData(vector.data(),vector.size()); } +Matrix Aurora::intersect(const Matrix& aMatrix1, const Matrix& aMatrix2) +{ + if(aMatrix1.isNull() || aMatrix2.isNull() || aMatrix1.isComplex() || aMatrix2.isComplex()) + { + return Matrix(); + } + + size_t size1= aMatrix1.getDataSize(); + size_t size2= aMatrix2.getDataSize(); + std::vector vector1(aMatrix1.getData(), aMatrix1.getData() + size1); + std::vector vector2(aMatrix2.getData(), aMatrix2.getData() + size2); + std::sort(vector1.begin(), vector1.end()); + std::sort(vector2.begin(), vector2.end()); + + std::vector intersection; + std::set_intersection(vector1.begin(), vector1.end(), + vector2.begin(), vector2.end(), + std::back_inserter(intersection)); + + return Matrix::copyFromRawData(intersection.data(), intersection.size()); +} + +Matrix Aurora::intersect(const Matrix& aMatrix1, const Matrix& aMatrix2, Matrix& aIa) +{ + if(aMatrix1.isNull() || aMatrix2.isNull() || aMatrix1.isComplex() || aMatrix2.isComplex()) + { + return Matrix(); + } + + Matrix result = intersect(aMatrix1,aMatrix2); + + size_t size = result.getDataSize(); + double* iaResult = Aurora::malloc(size); + for(size_t i=0; i