小编liz*_*isk的帖子

对于返回prvalues并返回悬空引用的迭代器,move_iterator被破坏

我查看了STL源代码std::move_iterator<Iterator>,发现它返回了Iterator::value_type&&.当Iterator::referencer值与r值不同时,这会导致不正确的行为Iterator::value_type&.

我有一个代理对象的类reference(如in std::vector<bool>),可以隐式转换为value_type.普通迭代器只是解释引用此代理(输入迭代器要求允许这样做),但std::move_iterator调用转换为value_type开销,然后返回对创建的临时对象的悬空引用.

std::move_iteratorstd::vector<bool>由于某种原因仍然可以使用(可能因为bool是一个简单的类型,悬空bool&&不会导致错误),但不是我的班级.这让我感到困惑,我不明白如何解决它,我认为这是STL中的一个错误.

以下是std::move_iteratorGCC 4.8.1 的简化源代码:

template <typename Iterator>
class move_iterator {
public:
    typedef typename iterator_traits<Iterator>::value_type value_type;
    typedef value_type&& reference;

    reference operator*() const {
        return std::move(*it);
    }

private:
    Iterator it;
};
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl move-semantics c++11

6
推荐指数
1
解决办法
313
查看次数

如何估计OpenCV中的2D相似变换(线性共形,非反射相似性)?

我试图通过匹配SIFT描述符并通过RANSAC查找转换矩阵来搜索输入图像中的特定对象.该对象只能通过2D空间中的相似变换(缩放,旋转,平移)在场景中进行修改,因此我需要在3D空间中估计2x2变换矩阵而不是3x3单应矩阵.我怎样才能在OpenCV中实现这一目标?

opencv image-processing computer-vision homography affinetransform

4
推荐指数
1
解决办法
1万
查看次数

boost :: any违反Liskov替换原则

我发现无法提取对boost::any包含派生类型的基类型的引用:

boost::any holder = Derived();
const Base& base_ref = boost::any_cast<const Base&>(holder);
Run Code Online (Sandbox Code Playgroud)

抛出一个boost::bad_any_cast例外.

这似乎是违反Liskov替代原则并不是很方便.有没有解决方法?

c++ polymorphism boost type-erasure boost-any

4
推荐指数
1
解决办法
169
查看次数

密集的SIFT比SIFT更适合词袋吗?

我正在使用OpenCV实现Bag-of-Words图像分类器.最初我测试了在SURF关键点中提取的SURF描述符.我听说Dense SIFT(或PHOW)描述符可以更好地用于我的目的,所以我也尝试过它们.

令我惊讶的是,他们表现得更差,实际上差了近10倍.我能做错什么?我正在使用OpenCV的DenseFeatureDetector获取关键点.我从9层中提取每个图像大约5000个描述符,并将它们聚类成500个簇.

我应该从VLFeat库中尝试PHOW描述符吗?此外,我不能在OpenCV的SVM实现中使用chi square内核,这在许多论文中都是推荐的.这对分类器质量至关重要,我应该尝试另一个库吗?

另一个问题是尺度不变性,我怀疑它可能受到密集特征提取的影响.我对吗?

opencv classification feature-extraction computer-vision

3
推荐指数
1
解决办法
3725
查看次数

预测SVM分类器的计算复杂度

线性SVM的预测复杂度是多少?它的分离面只是一个超平面,所以预测时间似乎不应该取决于训练数据.与此同时,我读到复杂性与支持向量的数量成正比.将所有这些支持向量保留在训练有素的分类器中有什么意义?

machine-learning svm

3
推荐指数
2
解决办法
2149
查看次数

如何理解LIBLINEAR中的偏差参数?

我不理解LIBLINEAR的API中偏差参数的含义.为什么在培训期间由用户指定?它不应该只是从分离超平面到原点的距离,它是学习模型的参数吗?

这来自README:

struct problem
{
    int l, n;
    int *y;
    struct feature_node **x;
    double bias;
};
Run Code Online (Sandbox Code Playgroud)

如果bias> = 0,我们假设在每个数据实例的末尾添加了一个附加功能.

这个附加功能是什么?

libsvm liblinear

3
推荐指数
1
解决办法
2008
查看次数

如何将OneVsRestClassifier与SVC一起用于多标签问题?

我正在使用OneVsRestClassifier进行多标签分类.它适用于LinearSVC,但是当我将其应用于SVC时,会出现以下错误:

classifier = OneVsRestClassifier(SVC(class_weight='balanced'))
classifier.fit(X1, y1)
y2 = classifier.predict(X2)

Traceback (most recent call last):
...
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 219, in predict
  return predict_ovr(self.estimators_, self.label_binarizer_, X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 93, in predict_ovr
  Y = np.array([_predict_binary(e, X) for e in estimators])
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 66, in _predict_binary
  score = estimator.predict_proba(X)[:, 1]
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 490, in predict_proba
  "probability estimates must be enabled to use this method")
NotImplementedError: probability estimates must be enabled to use this method</code>
Run Code Online (Sandbox Code Playgroud)

有人知道它是什么吗?

svm scikit-learn

3
推荐指数
1
解决办法
2842
查看次数

多标签分类的特征选择(scikit-learn)

我正在尝试通过 scikit-learn (sklearn.feature_selection.SelectKBest) 中的卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到以下警告:

UserWarning: Duplicate scores. Result may depend on feature ordering.There are probably duplicate features, or you used a classification score for a regression task. warn("Duplicate scores. Result may depend on feature ordering."

为什么会出现这种情况以及如何正确应用特征选择?

chi-squared feature-selection scikit-learn

2
推荐指数
1
解决办法
3933
查看次数

我应该使用boost :: variant吗?

我的虚函数可以返回单个Tstd::vector<T>.boost::variant<T, std::vector<T>>在这种情况下返回是一个好主意还是总是返回std::vector<T>?哪个看起来更好,性能开销最小?返回单个值时使用变量会更快吗?

c++ boost boost-variant

2
推荐指数
1
解决办法
265
查看次数

模板函子包装器,可以返回void或非void值

如何从模板函子包装器返回任意类型(void或non-void)?我使用包装器用于前置条件和后置条件,因此我需要在从包装器返回之前将返回值存储在局部变量中.但是当返回的类型为void时,编译器会给出错误,因为变量不能具有void类型.这可以做什么?

template <typename Functor, typename... Args>
auto Decorate(Functor f, Args&&... args)
-> decltype(f(std::forward<Args>(args)...)) {
    // preconditions
    const auto result = f(std::forward<Args>(args)...);
    // postconditions
    return result;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming c++11

2
推荐指数
1
解决办法
1260
查看次数