gpt4 book ai didi

c++ - 保存为成员的 SelfAdjointEigenSolver 结果在另一个范围内重新初始化

转载 作者:行者123 更新时间:2023-11-28 04:41:57 27 4
gpt4 key购买 nike

我试图在特征矩阵的一个 block 上运行主成分分析。输入矩阵中的观察值在列中。我想将特征向量保存为矩阵以备后用。但是当我在另一个范围内使用它时,矩阵 (m_pcaCoefs)“被重新初始化”,当然是在类内。

我很确定我遗漏了一些有关 eigen 工作原理的信息!

class foo {
public:
using InputMatrixType = Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic>;

void computePca(InputMatrixType & inputMatrix)
{
// m_pcaCoefs is a private member of dense matrix type
size_t start = 1;
auto r = inputMatrix.rows();
auto c = inputMatrix.cols();
Eigen::Block<InputMatrixType> inputBlock
= inputMatrix.block( start, 0 ,r-start , c );

// center the data
m_pixelValueMeans = inputBlock.rowwise().mean();
inputBlock.colwise() -= m_pixelValueMeans;

// inputBlock is a d by n, where d is the number of observation
InputMatrixType cov = inputBlock * inputBlock.adjoint();
cov = cov / (c - 1);
Eigen::SelfAdjointEigenSolver<InputMatrixType> eig(cov);
InputMatrixType m_pcaCoefs = eig.eigenvectors();
// here m_pcaCoefs looks fine
std::cout << m_pcaCoefs.size() << std::endl; // output: 9
}

void print()
{
std::cout << m_pcaCoefs.size() << std::endl; // output: 0
}
protected:
InputMatrixType m_pcaCoefs;
}


int main()
{
foo test;
test.computePca(someMatrix); // outputs 9
test.print() // output 0
}

知道如何将特征向量复制到 m_pcaCoefs 吗?

最佳答案

InputMatrixType m_pcaCoefs = eig.eigenvectors();

这不是你想的那个是你类(class)的成员。

你应该只使用:

m_pcaCoefs = eig.eigenvectors(); // use member m_pcaCoefs

关于c++ - 保存为成员的 SelfAdjointEigenSolver 结果在另一个范围内重新初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com