Fix Matrix block function bug.

This commit is contained in:
kradchen
2023-05-17 15:09:59 +08:00
parent 7babd216de
commit 88e1052992
2 changed files with 6 additions and 3 deletions

View File

@@ -476,11 +476,15 @@ namespace Aurora {
double& Matrix::operator[](size_t index) { return getData()[index];} double& Matrix::operator[](size_t index) { return getData()[index];}
double Matrix::operator[](size_t index) const { return getData()[index];} double Matrix::operator[](size_t index) const { return getData()[index];}
Matrix Matrix::block(int aDim,int aBeginIndex, int aEndIndex){ Matrix Matrix::block(int aDim,int aBeginIndex, int aEndIndex) const{
if(aDim>2 ){ if(aDim>2 ){
std::cerr<<"block only support 1D-3D data!"<<std::endl; std::cerr<<"block only support 1D-3D data!"<<std::endl;
return Matrix(); return Matrix();
} }
//横向vector切面为0为1都强制设置aDim为1来处理
if (isVector() && aDim == 0 && getDimSize(1)>1){
aDim = 1;
}
if (aBeginIndex>=getDimSize(aDim) || aBeginIndex<0){ if (aBeginIndex>=getDimSize(aDim) || aBeginIndex<0){
std::cerr<<"block BeginIndx error!BeginIndx:"<<aBeginIndex<<std::endl; std::cerr<<"block BeginIndx error!BeginIndx:"<<aBeginIndex<<std::endl;
return Matrix(); return Matrix();
@@ -494,7 +498,6 @@ namespace Aurora {
double * dataOutput = malloc(dataSize); double * dataOutput = malloc(dataSize);
int colStride = getDimSize(0); int colStride = getDimSize(0);
int sliceStride = getDimSize(0)*getDimSize(1); int sliceStride = getDimSize(0)*getDimSize(1);
switch (aDim) { switch (aDim) {
case 0:{ case 0:{
int colStride2 = dimLength; int colStride2 = dimLength;

View File

@@ -181,7 +181,7 @@ namespace Aurora {
* @param aEndIndex 终止索引,包含 * @param aEndIndex 终止索引,包含
* @return Matrix 返回矩阵 * @return Matrix 返回矩阵
*/ */
Matrix block(int aDim,int aBeginIndx, int aEndIndex); Matrix block(int aDim,int aBeginIndx, int aEndIndex) const;
/** /**
* 矩阵乘法 * 矩阵乘法