matrixbase::GetSubMatrix

Description

Get a subset of this matrix specified by 0 based column and row indices or indices vector. -1 means to last col/row

Syntax

BOOL GetSubMatrix( matrixbase & mbTarget, int c1 = 0, int c2 = -1, int r1 = 0, int r2 = -1 )

BOOL GetSubMatrix( matrixbase & mbTarget, const vector<uint> vnIndices, BOOL bRow = TRUE)

Parameters

mbTarget
[output] Matixbase derived object containing returned matrixbase subset
c1
[input] Begining column index, default is 0 (0 based offset)
c2
[input] Ending column index, (inclusive) default -1 is GetNumCols -1 (0 based offset)
r1
[input] Begining row index, default is 0 (0 based offset)
r2
[input] Ending row index, (inclusive) default -1 is GetNumRows -1 (0 based offset)
vnIndices
[input] Including the indices of the wanted rows/cols of sub matrix from source matrix.
bRow
[input] Default TRUE is to extract rows, else to extract columns.

Return

Returns TRUE on successful exit and FALSE on failure.

Examples

EX1

// Extract a submatrix
void matrixbase_GetSubMatrix_ex1()
{
    matrix<double> mat1 = { 
        {2,2,2,2,2},
        {2,1,1,1,2},
        {2,1,1,1,2},
        {2,2,2,2,2}                
    };
 
    MatrixPage MatPg1;
    MatPg1.Create("Origin");
    MatrixLayer MatLy1 = MatPg1.Layers(0);
    Matrix Mat1(MatLy1);
    printf("  Original matrix %s has been created.\n",Mat1.GetName());
    Mat1 = mat1;
 
    MatrixPage MatPg2;
    MatPg2.Create("Origin");
    MatrixLayer MatLy2 = MatPg2.Layers(0);
    Matrix Mat2(MatLy2);
 
    // Demonstration of GetSubMatrix to extract the central 2x3 area
    int rc=Mat1.GetSubMatrix(Mat2,1,3,1,2);
    if(!rc) 
        printf("  Error: GetSubMatrix on %s failed.\n",Mat1.GetName());
    else
        printf("  Extracted submatrix from (2,2) to (3,4) is %s.\n",Mat2.GetName());
    
    MatrixPage MatPg3;
    MatPg3.Create("Origin");
    MatrixLayer MatLy3 = MatPg3.Layers(0);
    Matrix Mat3(MatLy3);
 
    // Demonstration of GetSubMatrix to extract the central 2x4 area
    rc=Mat1.GetSubMatrix(Mat3,1,-1,1,2);
    if(!rc) 
        printf("  Error: GetSubMatrix on %s failed.\n",Mat1.GetName());
    else
        printf("  Extracted submatrix from (2,2) to (3,4) is %s.\n",Mat3.GetName());
}

EX2

// Extract submatrix from certain rows of a source matrix
void test_matrixbase_GetSubMatrix1()
{
        int ii,jj;
        int nRows = 5;
        int nCols = 5;
        
        vector<uint> vnIndices = {0, 2, 3, 4};
        
        matrix matSrc=
                {
                        {1,2,3,4,5},
                        {6,7,8,9,10},
                        {11,12,13,14,15},
                        {16,17,18,19,20},
                        {21,22,23,24,25}
                };
                
        matrix matTarRow;
        
        // Demonstration of GetSubMatrix to extract certain rows from matrix
        bool bRowCheck = matSrc.GetSubMatrix(matTarRow, vnIndices, true);
        
        // Print out the submatrix.
        printf("matTarRow = \n");
        if(bRowCheck)
        {
                for(ii=0; ii<matTarRow.GetNumRows() && bRowCheck; ii++)
                {
                        for(jj=0; jj<matTarRow.GetNumCols() && bRowCheck; jj++)
                        {
                                printf("%f ",matTarRow[ii][jj]);
                        }
                        printf("\n");
                }
        }
        
}

Remark

See Also

matrixbase::CopyTo

header to Include

origin.h