相关疑难解决方法(0)

特征如何沿特定维度连接矩阵?

我有两个特征矩阵,我想连接它们,就像在matlab中一样 cat(0, A, B)

在本征中有什么相同的东西吗?

谢谢.

c++ eigen

37
推荐指数
3
解决办法
2万
查看次数

如何从特征中的向量中生成矩阵?

我有四个列向量.我需要将它们附加到一个四乘四的矩阵.是否有构造函数或其他东西?

c++ vector matrix eigen

10
推荐指数
2
解决办法
1万
查看次数

C++:Eigen conservativeResize太贵了?

我有一些特征矩阵的尺寸我事先不知道,我只有一个上限.我有一个循环,在其中我逐列填充这些矩阵(我使用上限初始化它们),直到满足停止标准(假设在j次迭代之后).

我现在的问题是:在循环之后,我需要那些矩阵进行矩阵乘法(显然只使用前j列).直接的解决方案是使用Eigen的conservativeResize并向前行并执行矩阵乘法.由于矩阵往往非常大(100000+维度)和(据我所见,不确定)Eigen的conservativeResize为调整大小的矩阵重新分配内存并执行一次深度复制,这种解决方案非常昂贵.

我正在考虑编写自己的自定义矩阵乘法函数,该函数使用旧的(大)矩阵,并使用参数指定要使用的列数.我担心虽然Eigen的矩阵乘法更加优化,但最终这个解决方案比使用保守的大小调整和标准的特征乘法更慢......

我应该咬紧牙关并使用conservativeResize还是有人有更好的主意?BTW:我们所讨论的矩阵在循环/调整大小后用于3次乘法和1次转置

提前致谢!

编辑: 这是代码的相关部分(其中X是MatrixXd,y是VectorXd,numComponents是PLS1应该使用的潜在变量的数量).但问题是:在开始时,numComponents将始终是X中的维数(X.cols()),但停止标准应该检查输出向量中解释的方差的相对改进(我有尚未实施).如果相对改进太小,算法应该停止(因为我们对前j个组件感到满意),然后计算回归系数.为此,我需要保守的重音:

using namespace Eigen;
MatrixXd W,P,T,B;
VectorXd c,xMean;
double xMean;

W.resize(X.cols(),numComponents);
P.resize(X.cols(),numComponents);
T.resize(X.rows(),numComponents);
c.resize(numComponents);
xMean.resize(X.cols());
xMean.setZero();
yMean=0;
VectorXd yCopy=y;
//perform PLS1
for(size_t j=0; j< numComponents; ++j){
    VectorXd tmp=X.transpose()*y;
    W.col(j)=(tmp)/tmp.norm();
    T.col(j)=X*W.col(j);
    double divisorTmp=T.col(j).transpose()*T.col(j);
    c(j)=(T.col(j).transpose()*y);
    c(j)/=divisorTmp;
    P.col(j)=X.transpose()*T.col(j)/divisorTmp;
    X=X-T.col(j)*P.col(j).transpose();
    y=y-T.col(j)*c(j);
    if(/*STOPPINGCRITERION(TODO)*/ && j<numComponents-1){
        numComponents=j+1;
        W.conservativeResize(X.cols(),numComponents);
        P.conservativeResize(X.cols(),numComponents);
        T.conservativeResize(X.rows(),numComponents);
        c.conservativeResize(numComponents);
    }
}
//store regression matrix
MatrixXd tmp=P.transpose()*W;
B=W*tmp.inverse()*c;
yCopy=yCopy-T*c;
mse=(yCopy.transpose()*yCopy);
mse/=y.size();//Mean Square Error
Run Code Online (Sandbox Code Playgroud)

c++ eigen

1
推荐指数
1
解决办法
4103
查看次数

标签 统计

c++ ×3

eigen ×3

matrix ×1

vector ×1