From 84fee55eb8e217947884c9e98f70faad4d3900eb Mon Sep 17 00:00:00 2001 From: sunwen Date: Thu, 20 Apr 2023 17:52:36 +0800 Subject: [PATCH] Fix repmat with complex bug. --- src/Function1D.cpp | 17 ++++++++++------- src/Function1D.h | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Function1D.cpp b/src/Function1D.cpp index 5a44f66..fa90ad1 100644 --- a/src/Function1D.cpp +++ b/src/Function1D.cpp @@ -237,7 +237,8 @@ Matrix Aurora::repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes) { return Matrix(); } - int originalDataSize = aMatrix.getDataSize(); + int complexStep = aMatrix.getValueType(); + int originalDataSize = aMatrix.getDataSize() * complexStep; double* resultData = Aurora::malloc(originalDataSize * aRowTimes * aColumnTimes); int row = aMatrix.getDimSize(0); int column = 1; @@ -252,10 +253,10 @@ Matrix Aurora::repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes) { for(int j=1; j<=aRowTimes; ++j) { - std::copy(originalData, originalData+row, resultDataTemp); - resultDataTemp += row; + std::copy(originalData, originalData+row*complexStep, resultDataTemp); + resultDataTemp += row*complexStep; } - originalData += row; + originalData += row*complexStep; } resultDataTemp = resultData; @@ -273,7 +274,7 @@ Matrix Aurora::repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes) resultInfo.push_back(column); } - return Matrix(std::shared_ptr(resultData, Aurora::free),resultInfo); + return Matrix(std::shared_ptr(resultData, Aurora::free),resultInfo, aMatrix.getValueType()); } Matrix Aurora::repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes, int aSliceTimes) @@ -282,8 +283,10 @@ Matrix Aurora::repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes, int { return Matrix(); } + + int complexStep = aMatrix.getValueType(); Matrix resultTemp = Aurora::repmat(aMatrix, aRowTimes, aColumnTimes); - int resultTempDataSize = resultTemp.getDataSize(); + int resultTempDataSize = resultTemp.getDataSize() * complexStep; double* resultData = Aurora::malloc(resultTempDataSize * aSliceTimes); std::copy(resultTemp.getData(), resultTemp.getData() + resultTempDataSize, resultData); for(int i=1; i(resultData, Aurora::free),resultInfo); + return Matrix(std::shared_ptr(resultData, Aurora::free), resultInfo, aMatrix.getValueType()); } diff --git a/src/Function1D.h b/src/Function1D.h index 755461a..a0eb900 100644 --- a/src/Function1D.h +++ b/src/Function1D.h @@ -46,6 +46,8 @@ namespace Aurora { Matrix repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes); Matrix repmat(const Matrix& aMatrix,int aRowTimes, int aColumnTimes, int aSliceTimes); + + Matrix log(const Matrix& aMatrix, int aBaseNum = -1); };