本文整理汇总了C++中MatrixD类的典型用法代码示例。如果您正苦于以下问题:C++ MatrixD类的具体用法?C++ MatrixD怎么用?C++ MatrixD使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MatrixD类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: create_sequence
double State::transition_row_partition_assignments(const MatrixD& data,
vector<int> which_rows) {
vector<int> global_column_indices = create_sequence(data.size2());
double score_delta = 0;
//
int num_rows = which_rows.size();
if (num_rows == 0) {
num_rows = data.size1();
which_rows = create_sequence(num_rows);
//FIXME: use own shuffle so seed control is in effect
std::random_shuffle(which_rows.begin(), which_rows.end());
}
set<View*>::iterator svp_it;
for (svp_it = views.begin(); svp_it != views.end(); svp_it++) {
// for each view
View& v = **svp_it;
vector<int> view_cols = get_indices_to_reorder(global_column_indices,
v.global_to_local);
const MatrixD data_subset = extract_columns(data, view_cols);
map<int, vector<double> > row_data_map = construct_data_map(data_subset);
vector<int>::iterator vi_it;
for (vi_it = which_rows.begin(); vi_it != which_rows.end(); vi_it++) {
// for each SPECIFIED row
int row_idx = *vi_it;
vector<double> vd = row_data_map[row_idx];
score_delta += v.transition_z(vd, row_idx);
}
}
data_score += score_delta;
return score_delta;
}
示例2: doBenchANNPriority
BenchResult doBenchANNPriority(const MatrixD& d, const MatrixD& q, const int K, const int itCount, const int searchCount)
{
BenchResult result;
boost::timer t;
const int ptCount(d.cols());
const double **pa = new const double *[d.cols()];
for (int i = 0; i < ptCount; ++i)
pa[i] = &d.coeff(0, i);
ANNkd_tree* ann_kdt = new ANNkd_tree(const_cast<double**>(pa), ptCount, d.rows(), 8);
result.creationDuration = t.elapsed();
for (int s = 0; s < searchCount; ++s)
{
t.restart();
ANNidx nnIdx[K];
ANNdist dists[K];
for (int i = 0; i < itCount; ++i)
{
const VectorD& tq(q.col(i));
ANNpoint queryPt(const_cast<double*>(&tq.coeff(0)));
ann_kdt->annkPriSearch( // search
queryPt, // query point
K, // number of near neighbours
nnIdx, // nearest neighbours (returned)
dists, // distance (returned)
0); // error bound
}
result.executionDuration += t.elapsed();
}
result.executionDuration /= double(searchCount);
return result;
}
示例3: pinv_QR
bool pinv_QR(const MatrixD &A, MatrixD *invA, Scalar eps) {
MatrixD At = A.transpose();
HouseholderQR < MatrixD > qr = At.householderQr();
int m = A.rows();
//int n = A.cols();
MatrixD Rt = MatrixD::Zero(m, m);
bool invertible;
MatrixD hR = (MatrixD) qr.matrixQR();
MatrixD Y = ((MatrixD) qr.householderQ()).leftCols(m);
//take the useful part of R
for (int i = 0; i < m; i++) {
for (int j = 0; j <= i; j++)
Rt(i, j) = hR(j, i);
}
FullPivLU < MatrixD > invRt(Rt);
invertible = fabs(invRt.determinant()) > eps;
if (invertible) {
*invA = Y * invRt.inverse();
return true;
} else {
return false;
}
}
示例4: FP
void ConvolutionalNeuralNetwork::FP(int index){
MatrixD Z = Inputs.at(index).reshape(1,1).t();
for(int i = 0; i < network.size(); i++){
(network.at(i)->ForwardPropargation(Z)).copyTo(Z);
}
Z.copyTo(ZL);
}
示例5: pinv_QR_Z
bool pinv_QR_Z(const MatrixD &A, const MatrixD &Z0, MatrixD *invA, MatrixD *Z, Scalar lambda_max, Scalar eps) {
VectorD sigma; //vector of singular values
Scalar lambda2;
MatrixD AZ0t = (A * Z0).transpose();
HouseholderQR < MatrixD > qr = AZ0t.householderQr();
int m = A.rows();
int p = Z0.cols();
MatrixD Rt = MatrixD::Zero(m, m);
bool invertible;
MatrixD hR = (MatrixD) qr.matrixQR();
MatrixD Y = ((MatrixD) qr.householderQ()).leftCols(m);
//take the useful part of R
for (int i = 0; i < m; i++) {
for (int j = 0; j <= i; j++)
Rt(i, j) = hR(j, i);
}
FullPivLU < MatrixD > invRt(Rt);
invertible = fabs(invRt.determinant()) > eps;
if (invertible) {
*invA = Z0 * Y * invRt.inverse();
*Z = Z0 * (((MatrixD) qr.householderQ()).rightCols(p - m));
return true;
} else {
MatrixD R = MatrixD::Zero(m, m);
//take the useful part of R
for (int i = 0; i < m; i++) {
for (int j = i; j < m; j++) // TODO: is starting at i correct?
R(i, j) = hR(i, j);
}
//perform the SVD of R
JacobiSVD<MatrixD> svd_R(R, ComputeThinU | ComputeThinV);
sigma = svd_R.singularValues();
lambda2 = (1 - (sigma(m - 1) / eps) * (sigma(m - 1) / eps)) * lambda_max * lambda_max;
for (int i = 0; i < m; i++) {
sigma(i) = sigma(i) / (sigma(i) * sigma(i) + lambda2);
}
(*invA) = Z0 * Y * svd_R.matrixU() * sigma.asDiagonal() * svd_R.matrixV().transpose();
*Z = Z0 * (((MatrixD) qr.householderQ()).rightCols(p - m));
return false;
}
}
示例6: pinv_forBarP
bool pinv_forBarP(const MatrixD &W, const MatrixD &P, MatrixD *inv) {
MatrixD barW;
int rowsBarW = 0;
MatrixD tmp;
bool invertible;
for (int i = 0; i < W.rows(); i++) {
if (W(i, i) > 0.99) { //equal to 1 (safer)
rowsBarW++;
barW = (MatrixD(rowsBarW, W.cols()) << barW, W.row(i)).finished();
}
}
tmp = barW * P * barW.transpose();
FullPivLU < MatrixD > inversePbar(tmp);
invertible = inversePbar.isInvertible();
if (invertible) {
(*inv) = P * barW.transpose() * inversePbar.inverse() * barW;
return true;
} else {
(*inv) = MatrixD::Zero(W.rows(), W.rows());
return false;
}
}
示例7: isOptimal
bool OSNSVelocityIK::isOptimal(int priority, const VectorD& dotQ,
const MatrixD& tildeP, MatrixD* W,
VectorD* dotQn, double eps) {
VectorD barMu;
bool isOptimal = true;
barMu = tildeP.transpose() * dotQ;
for (int i = 0; i < n_dof; i++) {
if ((*W)(i, i) < 0.1) { //equal to 0.0 (safer)
if (abs(dotQ(i) - dotQmax(i)) < eps)
barMu(i) = -barMu(i);
if (barMu(i) < 0.0) {
(*W)(i, i) = 1.0;
(*dotQn)(i) = 0.0;
isOptimal = false;
}
}
}
return isOptimal;
}
示例8: construct_data_map
map<int, vector<double> > construct_data_map(const MatrixD data) {
unsigned int num_rows = data.size1();
map<int, vector<double> > data_map;
for(unsigned int row_idx=0; row_idx<num_rows; row_idx++) {
data_map[row_idx] = extract_row(data, row_idx);
}
return data_map;
}
示例9: pinv_damped
bool pinv_damped(const MatrixD &A, MatrixD *invA, Scalar lambda_max, Scalar eps) {
//A (m x n) usually comes from a redundant task jacobian, therfore we consider m<n
int m = A.rows() - 1;
VectorD sigma; //vector of singular values
Scalar lambda2;
int r = 0;
JacobiSVD<MatrixD> svd_A(A.transpose(), ComputeThinU | ComputeThinV);
sigma = svd_A.singularValues();
if (((m > 0) && (sigma(m) > eps)) || ((m == 0) && (A.array().abs() > eps).any())) {
for (int i = 0; i <= m; i++) {
sigma(i) = 1.0 / sigma(i);
}
(*invA) = svd_A.matrixU() * sigma.asDiagonal() * svd_A.matrixV().transpose();
return true;
} else {
lambda2 = (1 - (sigma(m) / eps) * (sigma(m) / eps)) * lambda_max * lambda_max;
for (int i = 0; i <= m; i++) {
if (sigma(i) > EPSQ)
r++;
sigma(i) = (sigma(i) / (sigma(i) * sigma(i) + lambda2));
}
//only U till the rank
MatrixD subU = svd_A.matrixU().block(0, 0, A.cols(), r);
MatrixD subV = svd_A.matrixV().block(0, 0, A.rows(), r);
(*invA) = subU * sigma.asDiagonal() * subV.transpose();
return false;
}
}
示例10: pinv
bool pinv(const MatrixD &A, MatrixD *invA, Scalar eps) {
//A (m x n) usually comes from a redundant task jacobian, therfore we consider m<n
int m = A.rows() - 1;
VectorD sigma; //vector of singular values
JacobiSVD<MatrixD> svd_A(A.transpose(), ComputeThinU | ComputeThinV);
sigma = svd_A.singularValues();
if (((m > 0) && (sigma(m) > eps)) || ((m == 0) && (A.array().abs() > eps).any())) {
for (int i = 0; i <= m; i++) {
sigma(i) = 1.0 / sigma(i);
}
(*invA) = svd_A.matrixU() * sigma.asDiagonal() * svd_A.matrixV().transpose();
return true;
} else {
return false;
}
}
示例11: construct_base_hyper_grids
void State::construct_base_hyper_grids(const MatrixD& data, int N_GRID,
vector<double> ROW_CRP_ALPHA_GRID,
vector<double> COLUMN_CRP_ALPHA_GRID) {
int num_rows = data.size1();
int num_cols = data.size2();
if (ROW_CRP_ALPHA_GRID.size() == 0) {
ROW_CRP_ALPHA_GRID = create_crp_alpha_grid(num_rows, N_GRID);
}
if (COLUMN_CRP_ALPHA_GRID.size() == 0) {
COLUMN_CRP_ALPHA_GRID = create_crp_alpha_grid(num_cols, N_GRID);
}
row_crp_alpha_grid = ROW_CRP_ALPHA_GRID;
column_crp_alpha_grid = COLUMN_CRP_ALPHA_GRID;
construct_cyclic_base_hyper_grids(N_GRID, num_rows, vm_b_grid);
construct_continuous_base_hyper_grids(N_GRID, num_rows, r_grid, nu_grid);
construct_multinomial_base_hyper_grids(N_GRID, num_rows,
multinomial_alpha_grid);
}
示例12: extract_columns
MatrixD extract_columns(const MatrixD fromM, vector<int> from_cols) {
int num_rows = fromM.size1();
int num_cols = from_cols.size();
MatrixD toM(num_rows, num_cols);
for(int to_col=0; to_col<num_cols; to_col++) {
int from_col = from_cols[to_col];
copy_column(fromM, from_col, toM, to_col);
}
return toM;
}
示例13: isIdentity
bool isIdentity(const MatrixD &A) {
bool isIdentity = true;
int n = A.rows();
int i = 0;
do {
isIdentity &= (A(i, i) > 0.99); // equal to 1.0 (safer)
i++;
} while (isIdentity && i < n);
return isIdentity;
}
示例14: transition_features
double State::transition_features(const MatrixD &data, vector<int> which_features) {
double score_delta = 0;
int num_features = which_features.size();
if(num_features==0) {
which_features = create_sequence(data.size2());
// FIXME: use seed to shuffle
std::random_shuffle(which_features.begin(), which_features.end());
}
vector<int>::iterator it;
for(it=which_features.begin(); it!=which_features.end(); it++) {
int feature_idx = *it;
vector<double> feature_data = extract_col(data, feature_idx);
// kernel selection
if(ct_kernel == 0) {
score_delta += transition_feature_gibbs(feature_idx, feature_data);
} else if(ct_kernel == 1) {
score_delta += transition_feature_mh(feature_idx, feature_data);
} else {
printf("Invalid CT_KERNEL");
assert(0==1);
}
}
return score_delta;
}
示例15: copy_column
void copy_column(const MatrixD fromM, int from_col, MatrixD &toM, int to_col) {
assert(fromM.size1()==toM.size1());
int num_rows = fromM.size1();
project(toM, boost::numeric::ublas::range(0, num_rows), boost::numeric::ublas::range(to_col, to_col+1)) = \
project(fromM, boost::numeric::ublas::range(0, num_rows), boost::numeric::ublas::range(from_col, from_col+1));
}