2.2.3.9.2 matrixbase::AnyNonZeroAnyNonZero
Description
Indicates whether or not each row or column of this matrix contains any non-zero elements.
Syntax
int AnyNonZero( vector<BOOL> & vAnyNonZero, int nDim = 1, double dTol = DEFAULT_TOLERANCE )
Parameters
- vAnyNonZero
- [input] The result vector
- nDim
- [input] The AnyNonZero test can occur row wise (relative to the first dimension when nDim=1) or column wise (relative to the second dimension when nDim=2)
- dTol
- [input] The tolerance used to decide whether or not an element is zero (if abs(element) < dTol, then the element is considered to be zero)
Return
Returns 0 on success and a non-zero error code on failure.
Examples
EX1
//to indicate whether or not each row or column of this matrix contains any non-zero elements
void matrixbase_AnyNonZero_ex1()
{
vector<BOOL> vRowAnyNonZeros, vColAnyNonZeros;
matrix<double> mat1 = {
{1, 1, 1, 0.001},
{1, 1, 0, 0},
{1, 0, 0, 0}
};
int rc;
// to indicate whether or not each column of this matrix contains any non-zero elements
rc=mat1.AnyNonZero(vRowAnyNonZeros);
if(rc!=0)
printf("AnyNonZero failed. Error Code=%d\n",rc);
else{
for(int n = 0 ; n<vRowAnyNonZeros.GetSize(); n++)
printf("%d ",vRowAnyNonZeros[n]);
// The result is 1 1 1 1.
printf("\n");
}
// to indicate whether or not each row of this matrix contains any non-zero elements
rc=mat1.AnyNonZero(vColAnyNonZeros,2);
if(rc!=0)
printf("AnyNonZero failed. Error Code=%d\n",rc);
else{
for(int n = 0 ; n<vColAnyNonZeros.GetSize(); n++)
printf("%d ",vColAnyNonZeros[n]);
// The result is 1 1 1.
printf("\n");
}
//if abs(element) < dTol then the element is considered to be zero
rc=mat1.AnyNonZero(vRowAnyNonZeros, 1, 0.01);
if(rc!=0)
printf(" AllNonZero failed. Error Code=%d\n",rc);
else{
for(int n = 0 ; n<vRowAnyNonZeros.GetSize(); n++)
printf("%d ",vRowAnyNonZeros[n]);
// The result is 1 1 1 0.
}
}
EX2
// Determin if any cell(s) in each matrix column (or row) are non-zeros.
void matrixbase_AnyNonZero_ex2()
{
PageBase pgbase;
int rc, ii, jj;
vector<BOOL> vRowHasAnyNonZeros;
matrix<double> mat1 = {
{1, 1, 0, 1, 1, 0, 99},
{1, 1, 0, 1, 99, 99, 99},
{1, 0, 0, 99, 99, 99, 99}
};
for(ii=0; ii<3; ii++)
for(jj=0; jj<7; jj++)
if(mat1[ii][jj]==99)
mat1[ii][jj]=NANUM; // set row=ii,col=jj to NANUM
// Input matrix:
// {1, 1, 0, 1, 1, 0, --},
// {1, 1, 0, 1, --, --, --},
// {1, 0, 0, --, --, --, --}
String MatWinName,MatLyName;
MatrixPage MatPg1;
MatPg1.Create("Origin");
MatWinName=MatPg1.GetName();
MatrixLayer MatLy1 = MatPg1.Layers(0);
MatLyName=MatLy1.GetName();
Matrix Mat1(MatLy1);
pgbase = Project.Pages(); // Get the active page
pgbase.Rename("Original");
printf("%s matrix is created.\n\n",Mat1.GetName());
Mat1=mat1;
rc=mat1.AnyNonZero(vRowHasAnyNonZeros);
if(rc!=0)
printf("AnyNonZero failed. Error Code=%d\n",rc);
else{
MatrixPage MatPg2;
MatPg2.Create("Origin");
MatrixLayer MatLy2 = MatPg2.Layers(0);
Matrix Mat2(MatLy2);
pgbase = Project.Pages(); // Get the active page
pgbase.Rename("AnyNonZero");
Mat2.SetSize(1,vRowHasAnyNonZeros.GetSize());
Mat2.SetRow(vRowHasAnyNonZeros, 0); // Set 1st Row(as the index starts 0) of Mat3
printf("AnyNonZero vector is placed in %s.\n",Mat2.GetName());
printf("Note that the NANUM cells are not taken into account as non-zero,\n");
}
}
Remark
Indicates whether or not each row or column of this matrix contains any (one or more) non-zero elements. For matrices having an underlying base type of double or complex the machine based precision is used to determine whether or not any element is zero.
See Also
matrixbase::AllNonZero
Header to Include
origin.h
|