本文整理汇总了C++中VectorXf::sum方法的典型用法代码示例。如果您正苦于以下问题:C++ VectorXf::sum方法的具体用法?C++ VectorXf::sum怎么用?C++ VectorXf::sum使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VectorXf
的用法示例。
在下文中一共展示了VectorXf::sum方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: random_index
size_t random_index (const VectorXf & likes)
{
float total = likes.sum();
ASSERT_LT(0, total);
while (true) {
float t = random_unif(0, total);
for (int i = 0, I = likes.size(); i < I; ++i) {
t -= likes(i);
if (t < 0) return i;
}
}
}
示例2: fit_eval
float Sphere::fit_eval ( const VectorXf &fitpar, const void *user_data)
{
/*
* Calculate the cost function value
* Optimize for the radius inside here
*/
const fitUserNew& user = (fitUserNew)user_data;
const VectorXf& r0 = fitpar;
float F;
MatrixXf diff = user->rr.rowwise() - r0.transpose();
VectorXf one = diff.rowwise().norm();
float sum = one.sum();
float sum2 = one.dot(one);
F = sum2 - sum*sum/user->rr.rows();
if(user->report)
std::cout << "r0: " << 1000*r0[0] << ", r1: " << 1000*r0[1] << ", r2: " << 1000*r0[2] << "; R: " << 1000*sum/user->rr.rows() << "; fval: "<<F<<std::endl;
return F;
}
示例3: growTree
void WCTree::growTree() {
// -- If we don't need any more splits, we're done.
if(pwcs_.size() < max_wcs_ || level_ == recursion_limit_) {
makeLeaf();
return;
}
// -- Fill X_ with the center points.
for(size_t i=0; i<pwcs_.size(); ++i) {
X_.col(i) = pwcs_[i]->center_;
}
// -- Subtract off the mean.
VectorXf mean = X_.rowwise().sum() / X_.cols();
for(size_t i=0; i<pwcs_.size(); ++i) {
X_.col(i) -= mean;
}
// -- If all of the weak classifiers had the same center, this is also a leaf.
if(X_.sum() == 0) {
makeLeaf();
return;
}
// -- Power method to find the eigenvector of XX', i.e. 1st principal component.
MatrixXf Xt = X_.transpose();
bool done = false;
while(!done) {
a_ = getRandomVector(X_.rows());
a_.normalize();
VectorXf prev = a_;
while(true) {
prev = a_;
a_ = X_ * (Xt * a_);
assert(a_.sum() != 0);
if(a_.sum() == 0) {
break;
}
a_.normalize();
if((a_ - prev).norm() < thresh_) {
done = true;
break;
}
}
}
// -- Compute b_ to be the mean value of a_'xt for xt in pwcs_.
VectorXf bs = VectorXf::Zero(pwcs_.size());
for(size_t i=0; i<pwcs_.size(); ++i) {
bs(i) = a_.dot(pwcs_[i]->center_);
}
b_ = bs.sum() / bs.rows();
// -- Add the newly computed a_ and b_ into the full list of constraints for the left and right children.
// The right child region is all x for a_'x >= b_, or -a_'x <= -b_
// The left child region is all x for a_'x <= b_
vector<VectorXf> region_a_left = region_a_;
vector<VectorXf> region_a_right = region_a_;
vector<float> region_b_left = region_b_;
vector<float> region_b_right = region_b_;
region_a_left.push_back(a_);
region_b_left.push_back(b_);
region_a_right.push_back(-a_);
region_b_right.push_back(-b_);
// -- Compute which weak classifiers in the region go on which side of the split.
vector<WeakClassifier*> left, right, left_consider, right_consider;
left.reserve(pwcs_.size() + consider_.size());
right.reserve(pwcs_.size() + consider_.size());
left_consider.reserve(pwcs_.size() + consider_.size());
right_consider.reserve(pwcs_.size() + consider_.size());
for(size_t i=0; i<pwcs_.size(); ++i) {
double dist = bs(i) - b_; //computeDistanceToSplit(pwcs_[i]->center_);
double dist2 = dist*dist;
if(dist == 0) {
right.push_back(pwcs_[i]);
left.push_back(pwcs_[i]);
}
else if(dist > 0) {
right.push_back(pwcs_[i]);
if(dist2 <= pwcs_[i]->theta_) {
left_consider.push_back(pwcs_[i]);
}
}
else {
left.push_back(pwcs_[i]);
if(dist2 <= pwcs_[i]->theta_) {
right_consider.push_back(pwcs_[i]);
}
}
}
// -- If all the weak classifiers are very close to each other, they can end up not being split by the
// boundary. If this happens, then call this a leaf and be done with it.
if(left.empty() || right.empty()) {
makeLeaf();
//.........这里部分代码省略.........
示例4: normalize_l1
void normalize_l1 (VectorXf & x, float tot) { x *= tot / x.sum(); }