本文整理汇总了C++中eigen::SparseMatrix::innerVector方法的典型用法代码示例。如果您正苦于以下问题:C++ SparseMatrix::innerVector方法的具体用法?C++ SparseMatrix::innerVector怎么用?C++ SparseMatrix::innerVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::SparseMatrix
的用法示例。
在下文中一共展示了SparseMatrix::innerVector方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateMatrix
//update random Vectors
void updateMatrix(Eigen::SparseMatrix<double,Eigen::RowMajor>& randomMatrix,
const Eigen::SparseMatrix<int,Eigen::RowMajor>& adjacencyMatrix,
int itr)
{
int numberOfRVector = randomMatrix.rows();
int numberOfVertice = randomMatrix.cols();
std::vector<double> rowSum = getRowSum(adjacencyMatrix);
for(int i=0; i<numberOfRVector;++i){
for(int h=0;h<itr;++h){
Eigen::SparseMatrix<double,Eigen::RowMajor> middleValueMatrix(numberOfVertice,1);
middleValueMatrix.reserve(1);
for(int j = 0; j<numberOfVertice; ++j){
Eigen::SparseMatrix<double,Eigen::RowMajor> v1(1,numberOfVertice), v2(numberOfVertice,1);
v1.reserve(numberOfVertice);
v2.reserve(1);
v1 = adjacencyMatrix.cast<double>().innerVector(j);
v2 = randomMatrix.innerVector(h).transpose();
Eigen::SparseMatrix<double,Eigen::RowMajor> middleValue1 = v1*v2;
double middleValue = 0;
if(rowSum[j] != 0){
middleValue = (*middleValue1.valuePtr())/rowSum[j];
} else
{
middleValue = 1;
}
middleValueMatrix.insert(j,0) = middleValue;
}
Eigen::SparseMatrix<double,Eigen::RowMajor> right = middleValueMatrix.transpose();
Eigen::SparseMatrix<double,Eigen::RowMajor> left = randomMatrix.innerVector(i);
randomMatrix.innerVector(i) = 0.5*(left + right);
}
}
}
示例2: getRowSum
std::vector<double> getRowSum(const Eigen::SparseMatrix<int,Eigen::RowMajor>& adjacencyMatrix)
{
int rowSize = adjacencyMatrix.rows();
std::vector<double> rowSum;
rowSum.reserve(rowSize);
for(int i=0; i<rowSize;++i){
double value = adjacencyMatrix.innerVector(i).sum();
rowSum.push_back(value);
}
return rowSum;
}