博客新址: http://blog.xuezhisd.top
邮箱:[email protected]
SparseMatrix sm1(1000,1000); //创建一个1000x1000的双精度的稀疏矩阵
SparseMatrix,RowMajor> sm2; //声明一个复数,行优先的稀疏矩阵
sm1.resize(m,n); // 将sm1变形成mxn的矩阵
sm1.reserve(nnz); // 为nnz个非零元素分配空间
SparseMatrix sm1;
//使用sm1初始化sm2
SparseMatrix sm2(sm1), sm3;
// 赋值(自动修改存储顺序)
sm3 = sm1;
// 插入一个新元素
sm1.insert(i, j) = v_ij;
// 更新value v_ij
sm1.coeffRef(i,j) = v_ij;
sm1.coeffRef(i,j) += v_ij;
sm1.coeffRef(i,j) -= v_ij;
std::vector< Eigen::Triplet<double> > tripletList; //三元组列表
tripletList.reserve(estimation_of_entries); //保留非零元素空间
//先填充tripletList,然后将其存储到稀疏矩阵中
sm1.setFromTriplets(TripletList.begin(), TripletList.end());
sm1.setZero()
sm1.rows(); // 行数
sm1.cols(); // 列数
sm1.nonZeros(); // 非零元素的个数
sm1.outerSize(); // 列优先的稀疏矩阵的行数,行优先的稀疏矩阵的列数
sm1.innerSize(); // 列优先的稀疏矩阵的列数,行优先的稀疏矩阵的行数
sm1.norm(); // 矩阵的欧式范数
sm1.squaredNorm(); //矩阵的平方范数(平方和)
sm1.blueNorm(); //
sm1.isVector(); // 检查是否是稀疏向量或稀疏矩阵
sm1.isCompressed(); // 检查是否是压缩格式
sm3 = sm1 + sm2;
sm3 = sm1 - sm2;
sm2 += sm1;
sm2 -= sm1;
sm3 = sm1 * s1; sm3 *= s1;
sm3 = s1 * sm1 + s2 * sm2; sm3 /= s1;
sm3 = sm1 * sm2;
dm2 = sm1 * dm1;
dv2 = sm1 * dv1;
sm2 = sm1.transpose();
sm2 = sm1.adjoint();
perm.indices(); // Reference to the vector of indices
sm1.twistedBy(perm); // Permute rows and columns
sm2 = sm1 * perm; // Permute the columns
sm2 = perm * sm1; // Permute the columns
sm1.cwiseProduct(sm2);
sm1.cwiseQuotient(sm2);
sm1.cwiseMin(sm2);
sm1.cwiseMax(sm2);
sm1.cwiseAbs();
sm1.cwiseSqrt();
sm1.block(startRow, startCol, rows, cols);
sm1.block(startRow, startCol);
sm1.topLeftCorner(rows, cols);
sm1.topRightCorner(rows, cols);
sm1.bottomLeftCorner( rows, cols);
sm1.bottomRightCorner( rows, cols);
sm1.innerVector(outer); // RW
sm1.innerVectors(start, size); // RW
sm1.leftCols(size); // RW
sm2.rightCols(size); // RO 只读,因为sm2是行优先的
sm1.middleRows(start, numRows); // RO 只读,因为sm1是列优先的
sm1.middleCols(start, numCols); // RW
sm1.col(j); // RW
sm2 = sm1.triangularview();
sm2 = sm1.selfadjointview();
dv2 = sm1.triangularView().solve(dv1);
dv2 = sm1.topLeftCorner(size, size).triangularView().solve(dv1);
sm1.valuePtr(); // 指向数值的指针
sm1.innerIndextr(); // 指向索引的指针
sm1.outerIndexPtr(); // 指向每一个内向量开头的指针
int outerIndexPtr[cols+1];
int innerIndices[nnz];
double values[nnz];
Map > sm1(rows,cols,nnz,outerIndexPtr, innerIndices,values); //RW 可读写
Map > sm2(...); //只读