2.2.3.9.60 matrixbase::SetByVector

Description

Set the values of a matrix equal to the values of a vector.

Syntax

int SetByVector( vectorbase & vb, BOOL bByRow = TRUE )

Parameters

vb
[input] Vector used to set the matrix values
bByRow
[input] Use Row order if TRUE otherwise use Column order

Return

0 if successful and the number of elements in the vector is the same as the number of elements in the matrix, otherwise the number of elements in the matrix minus the number of elements in the vector is returned.

Examples

EX1

// Set values into a matrix from a vector
void matrixbase_SetByVector_ex1()
{
    int rc;
    
    matrix mat1;
    rc=mat1.SetSize(2,3); // #rows=2, #cols=3
    MatrixPage MatPg1;
    MatPg1.Create("Origin");
    MatrixLayer MatLy1 = MatPg1.Layers(0);
    Matrix Mat1(MatLy1);
    Mat1 = mat1;
    // initial matrix is:
    //    {0,  0,  0}
    //    {0,  0,  0}

    vector vR = {1, 1, 1, 2, 2, 2};
    rc = Mat1.SetByVector(vR); // set the data row-wise (default)
    if(rc!=0) 
        printf("  Warning: Given vector size differs from the matrix size of %s. Size difference=%d\n",
          Mat1.GetName(),rc);
    else
        printf("  Data in vector {1 1 1 2 2 2} have been inserted in row order into %s.\n",
          Mat1.GetName());
    // Result matrix is:
    //    {1,  1,  1}
    //    {2,  2,  2}

    MatrixPage MatPg2;
    MatPg2.Create("Origin");
    MatrixLayer MatLy2 = MatPg2.Layers(0);
    Matrix Mat2(MatLy2);
    Mat2 = mat1;
    
    vector vC = {1, 1, 2, 2, 3, 3};
    rc = Mat2.SetByVector(vC, FALSE); // set the data column-wise
    if(rc!=0) 
        printf("  Warning: Given vector size differs from the matrix size of %s. Size difference=%d\n",
          Mat2.GetName(),rc);
    else
        printf("  Data in vector {1 1 2 2 3 3} have been inserted in cloumn order into %s.\n",
          Mat2.GetName());
    // Result matrix is:
    //    {1,  2,  3}
    //    {1,  2,  3}
}

EX2

// Set a vector value in a column - Error case
void matrixbase_SetByVector_ex2()
{
    int rc;
    
    matrix mat1;
    rc=mat1.SetSize(2,3); // #rows=2, #cols=3
    MatrixPage MatPg1;
    MatPg1.Create("Origin");
    MatrixLayer MatLy1 = MatPg1.Layers(0);
    Matrix Mat1(MatLy1);
    Mat1 = mat1;
    // initial matrix is:
    //    {0,  0,  0}
    //    {0,  0,  0}

    vector vR = {1, 2, 3, 4};
    rc = Mat1.SetByVector(vR); // set the data row-wise (default)

    if(rc>0)
        printf("  Warning: Given vector {1, 2, 3, 4} is smaller than %s. Size difference=%d\n",
          Mat1.GetName(),rc);
    else if(rc<0)
        printf("  Warning: Given vector {1, 2, 3, 4} is larger than %s. Size difference=%d\n",
          Mat1.GetName(),rc);
    else
    printf("  The result matrix %s has been correctly set.\n",
          Mat1.GetName());
}

Remark

Set the values of a matrix equal to the values of a vector. If the matrix has more elements than the vector then vector values are assigned until they are exausted and the remaining matrix values are left untouched. If the vector has more elements than the matrix then vector values are assigned to the last element of the matrix and the remaining elements of the vector are ignored.

See Also

matrixbase::GetAsVector, matrixbase::SetRow, matrixbase::GetRow, matrixbase::SetColumn, matrixbase::GetColumn

Header to Include

origin.h