本文整理汇总了C++中MatrixXf::noalias方法的典型用法代码示例。如果您正苦于以下问题:C++ MatrixXf::noalias方法的具体用法?C++ MatrixXf::noalias怎么用?C++ MatrixXf::noalias使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MatrixXf
的用法示例。
在下文中一共展示了MatrixXf::noalias方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: compute_relentropy_cpu
double MapOptimizer::compute_relentropy_cpu (MatrixXf & dH) const
{
const MatrixXf & H = m_conditional;
const MatrixSf & P = dom_flow.joint;
MatrixXf HP(H.rows(), H.cols());
MatrixXf HPt(H.rows(), H.cols());
#pragma omp parallel sections
{
#pragma omp section
HP.noalias() = H * P;
#pragma omp section
HPt.noalias() = H * P.transpose();
}
MatrixXf HPH = HP * H.transpose();
const float sum_P = m_dom_flow_sum;
const float sum_Q = m_cod_flow_sum;
const float dQ_scale = sum_P / sum_Q;
const MatrixSf & Q = cod_flow.joint;
MatrixSf & dQ = m_temp_dQ;
double relentropy = 0;
for (int i = 0; i < Q.outerSize(); ++i) {
for (MatrixSf::InnerIterator iter(Q,i); iter; ++iter) {
const float Q_yy = iter.value();
const float HPH_yy = HPH(iter.row(), iter.col());
const float dQ_yy = dQ_scale * Q_yy / HPH_yy;
relentropy += Q_yy * log(dQ_yy);
dQ.coeffRef(iter.row(), iter.col()) = dQ_yy;
}
}
relentropy /= sum_Q;
ASSERT_LE(0, relentropy);
MatrixXf dH2(H.rows(), H.cols());
#pragma omp parallel sections
{
#pragma omp section
dH.noalias() = dQ.transpose() * HP;
#pragma omp section
dH2.noalias() = dQ * HPt;
}
dH += dH2;
return relentropy;
}