本文整理汇总了C++中eigen::MatrixXd::cwiseProduct方法的典型用法代码示例。如果您正苦于以下问题:C++ MatrixXd::cwiseProduct方法的具体用法?C++ MatrixXd::cwiseProduct怎么用?C++ MatrixXd::cwiseProduct使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::MatrixXd
的用法示例。
在下文中一共展示了MatrixXd::cwiseProduct方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xcorEigen
// Cross-correlation implementation in Eigen
//' @rdname corFamily
//' @export
// [[Rcpp::export]]
Eigen::MatrixXd xcorEigen(Eigen::Map<Eigen::MatrixXd> & X,
Eigen::Map<Eigen::MatrixXd> & Y) {
// Handle degenerate cases
if (X.cols() == 0 || Y.cols() == 0) {
return Eigen::MatrixXd::Constant(0, 0, 0);
} else if (X.rows() == 0) { // && X.cols() > 0 && Y.cols() > 0 implicit
return Eigen::MatrixXd::Constant(X.cols(), Y.cols(),
Rcpp::NumericVector::get_na());
}
// Computing degrees of freedom
// n - 1 is the unbiased estimate whereas n is the MLE
const int df = X.rows() - 1; // Subtract 1 by default
// Centering matrices
Y.rowwise() -= Y.colwise().mean();
X.rowwise() -= X.colwise().mean();
// The covariance matrix
Eigen::MatrixXd cor = X.transpose() * Y / df;
// Compute 1 over the standard deviations of X and Y
Eigen::VectorXd inv_sds_X = (X.colwise().norm()/sqrt(df)).array().inverse();
Eigen::VectorXd inv_sds_Y = (Y.colwise().norm()/sqrt(df)).array().inverse();
// Scale the covariance matrix
cor = cor.cwiseProduct(inv_sds_X * inv_sds_Y.transpose());
return cor;
}
示例2: simulatetopographyGrid
/**
* Generates an artificial topographyGrid of size numRows x numCols if no
* topographic data is available. Results are dumped into topographyGrid.
* @param topographyGrid A pointer to a zero-initialized Grid of size
* numRows x numCols.
* @param numRows The desired number of non-border rows in the resulting matrix.
* @param numCols The desired number of non-border cols in the resulting matrix.
*/
void simulatetopographyGrid(Grid* topographyGrid, int numRows, int numCols) {
Eigen::VectorXd refx = refx.LinSpaced(numCols, -2*M_PI, 2*M_PI);
Eigen::VectorXd refy = refx.LinSpaced(numRows, -2*M_PI, 2*M_PI);
Eigen::MatrixXd X = refx.replicate(1, numRows);
X.transposeInPlace();
Eigen::MatrixXd Y = refy.replicate(1, numCols);
// Eigen can only deal with two matrices at a time,
// so split the computation:
// topographyGrid = sin(X) * sin(Y) * abs(X) * abs(Y) -pi
Eigen::MatrixXd absXY = X.cwiseAbs().cwiseProduct(Y.cwiseAbs());
Eigen::MatrixXd sins = X.array().sin().cwiseProduct(Y.array().sin());
Eigen::MatrixXd temp;
temp.resize(numRows, numCols);
temp = absXY.cwiseProduct(sins);
// All this work to create a matrix of pi...
Eigen::MatrixXd pi;
pi.resize(numRows, numCols);
pi.setConstant(M_PI);
temp = temp - pi;
// And the final result.
topographyGrid->data.block(border, border, numRows, numCols) =
temp.block(0, 0, numRows, numCols);
// Ignore positive values.
topographyGrid->data =
topographyGrid->data.unaryExpr(std::ptr_fun(validateDepth));
topographyGrid->clearNA();
}
示例3: Stack
void RunningStacker::Stack(Eigen::MatrixXd input)
{
n++;
if (n == 1)
{
mean = input;
M2 = Eigen::MatrixXd::Zero(input.rows(), input.cols());
return;
}
const Eigen::MatrixXd delta = input - mean;
mean = mean + delta / n;
M2 = M2 + delta.cwiseProduct(input - mean);
}
示例4: corEigen
// Correlation implementation in Eigen
//' @rdname corFamily
//' @export
// [[Rcpp::export]]
Eigen::MatrixXd corEigen(Eigen::Map<Eigen::MatrixXd> & X) {
// Handle degenerate cases
if (X.rows() == 0 && X.cols() > 0) {
return Eigen::MatrixXd::Constant(X.cols(), X.cols(),
Rcpp::NumericVector::get_na());
}
// Computing degrees of freedom
// n - 1 is the unbiased estimate whereas n is the MLE
const int df = X.rows() - 1; // Subtract 1 by default
X.rowwise() -= X.colwise().mean(); // Centering
Eigen::MatrixXd cor = X.transpose() * X / df; // The covariance matrix
// Get 1 over the standard deviations
Eigen::VectorXd inv_sds = cor.diagonal().array().sqrt().inverse();
// Scale the covariance matrix
cor = cor.cwiseProduct(inv_sds * inv_sds.transpose());
return cor;
}