小编jus*_*rld的帖子

具有std :: function的不同签名的Lambda函数

我不明白为什么第三种情况没问题(即使lambda的参数类型与std::function类型不同),而编译器抱怨第四种情况:

function<int(int)> idInt = [](int i) {return i;}; //OK
function<int(int&)> idInt = [](int &i) {return i;}; //OK
function<int(int&)> idInt = [](int i) {return i;}; //OK
function<int(int)> idInt = [](int &i) {return i;}; //ERROR!
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

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

`std :: vector`的快速哈希函数

我实现了这个解决方案来获取哈希值vector<T>:

namespace std
{
    template<typename T>
    struct hash<vector<T>>
    {
        typedef vector<T> argument_type;
        typedef std::size_t result_type;
        result_type operator()(argument_type const& in) const
        {
            size_t size = in.size();
            size_t seed = 0;
            for (size_t i = 0; i < size; i++)
                //Combine the hash of the current vector with the hashes of the previous ones
                hash_combine(seed, in[i]);
            return seed;
        }
    };
}

//using boost::hash_combine
template <class T>
inline void hash_combine(std::size_t& seed, T const& v)
{
    seed ^= std::hash<T>()(v) + 0x9e3779b9 + …
Run Code Online (Sandbox Code Playgroud)

c++ hash vector c++11

6
推荐指数
2
解决办法
5424
查看次数

为什么kd树不用于高维数据?

在kd tree的页面上引用维基百科:

kd树不适合在高维空间中有效地找到最近邻居.作为一般规则,如果维度为k,则数据中的点数N应为N >> 2k.否则,当kd树与高维数据一起使用时,树中的大多数点将被评估,并且效率不会比穷举搜索更好,[11]应该使用近似最近邻方法.

我不明白维度(k)和数据中的点数(N)之间的区别以及为什么关于何时kd树不方便的陈述是正确的.

algorithm

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

不确定unordered_map的工作原理

我有点困惑,unordered_map是如何工作的,什么是桶以及如何管理它们.

这篇博文中,unordered_map是向量的向量.

我的问题是:

  • 假设桶是"内部"向量是正确的吗?
  • 因为每个桶(向量)可以包含多个元素,由哈希表上的哈希冲突("外部"向量)给出,并且由于我们必须扫描这个内部向量(在线性时间内),假设我们是正确的必须在密钥类型上定义相等的方法(对哈希运算符成瘾)才能找到桶内的密钥?
  • 默认情况下外部向量(哈希表)大小是多少?
  • 默认情况下内部矢量大小是多少?
  • 如果一个桶中的元素数量变得太大会发生什么呢?换句话说,当重新发生时?

很抱歉这些问题,但我没有找到任何详细解释这个结构是如何工作的(例如在cppreference.com上).

c++ unordered-map

5
推荐指数
2
解决办法
1566
查看次数

局部敏感哈希还是 pHash?

我正在尝试实现一个通用的指纹记忆器:我们有一个可以通过智能指纹表达的文件(如图像的pHash或音频的色度图),如果我们想要的(昂贵的)函数已经在类似的文件上计算过,然后我们返回相同的结果(避免昂贵的计算)。

局部敏感哈希(LSH) 是一种流行且性能良好的解决方案,用于解决昂贵的多维空间中的近似最近邻问题。

pHash是一个很好的库,它实现了图像的感知散列。

因此,pHash 将多维输入(图像)转换为一维对象(哈希码),这与 LSH(再次,LSH 中的多维对象)有所不同。

所以我想知道我们如何为 pHash 哈希值实现单维 LSH?或者简单地说:我们如何将类似的 pHash 值分组到 bin 中?它可以替代经典的 LSH 方法吗(如果不是为什么)?

c++ hash locality-sensitive-hash phash

5
推荐指数
1
解决办法
1334
查看次数

在 C++ 中将 cv::Mat 向量写入二进制文件

如标题所示,我有std::vector<cv::Mat> matrices一个要写入/读取二进制文件的文件。

现在,根据这个答案,我应该做的就是写作:

 ofstream fout("matrices.bin", ios::out | ios::binary);
 size_t size = matrices.size();
 fout.write((char*)&size, sizeof(size));
 fout.write((char*)&matrices[0], v.size() * sizeof(cv::Mat));
 fout.close();
Run Code Online (Sandbox Code Playgroud)

然而,按照这个答案,编写cv::Mat对象似乎有点棘手,并且在答案中matRead完成matWrite这项工作。所以我想知道我是否应该执行以下操作而不是上面的代码:

ofstream fout("matrices.bin", ios::out | ios::binary);
size_t size = matrices.size();
fout.write((char*)&size, sizeof(size));
for(size_t i = 0 ; i < matrices.size() ; i++)
  matWrite("matrices.bin", matrices[i]);
Run Code Online (Sandbox Code Playgroud)

然而,此代码不起作用,因为在每个周期matWrite()都会覆盖,因此我应该在写入矩阵本身之前matrices.bin附加作为偏移量的大小。matrices[i]

我应该怎么办?

更新:

我想出了这个解决方案,重写matWritematRead使用可选参数在写入期间附加矩阵并从某个点开始读取:

void matwrite(const std::string& filename, const cv::Mat& mat, const bool append = false) …
Run Code Online (Sandbox Code Playgroud)

c++ binary opencv ifstream ofstream

5
推荐指数
1
解决办法
3514
查看次数

平均精度的正确版本是什么?

我正在尝试计算Oxford Building 图像数据集平均精度(和平均平均精度)。

下面是他们提供的用于计算平均精度的代码。请注意,这pos_set是来自地面训练集的“最佳”和“好”图像的并集,而junk_set是一组不相关的图像。

void OxfordTest::computeAp(std::vector<std::string> &ranked_list){
      float old_recall = 0.0;
      float old_precision = 1.0;
      float ap = 0.0;

      size_t intersect_size = 0;
      size_t i = 0;
      size_t j = 0;
      for ( ; i<ranked_list.size(); ++i) {
              if(!pos_set.count(ranked_list[i]))
                  std::cin.get();
        }
        if (junk_set.count(ranked_list[i])) continue; 
        if (pos_set.count(ranked_list[i])) intersect_size++;

        float recall = intersect_size / (float)pos_set.size();
        float precision = intersect_size / (j + 1.0);

        ap += (recall - old_recall)*((old_precision + precision)/2.0);

        old_recall = recall; …
Run Code Online (Sandbox Code Playgroud)

information-retrieval precision-recall

5
推荐指数
1
解决办法
798
查看次数

Matlab开关/ case中的空语句?

我正在阅读代码,在第97行,我发现了以下代码:

switch lower(opts.color)
  case 'rgb'
  case 'opponent'
  ...
Run Code Online (Sandbox Code Playgroud)

我从未见过空话(根据文件).这是什么意思?

"如果lower(opts.color)rgb或者opponent然后做..."

要么

"如果lower(opts.color)rgb什么也不做,如果它opponent..."?

matlab switch-statement

5
推荐指数
1
解决办法
816
查看次数

Openmp和std :: vector的缩减?

我想让这段代码并行:

std::vector<float> res(n,0);
std::vector<float> vals(m);
std::vector<float> indexes(m);
// fill indexes with values in range [0,n)
// fill vals and indexes
for(size_t i=0; i<m; i++){
  res[indexes[i]] += //something using vas[i];
}
Run Code Online (Sandbox Code Playgroud)

这个文章它的建议使用:

#pragma omp parallel for reduction(+:myArray[:6])
Run Code Online (Sandbox Code Playgroud)

这个问题中,评论部分提出了相同的方法.

我有两个问题:

  1. 我不知道m在编译时,从这两个例子看来,它似乎是必需的.是这样吗?或者,如果我可以在这种情况下使用它,我需要?在以下命令中替换#pragma omp parallel for reduction(+:res[:?])什么?m还是n
  2. 难道是相关的指标for是相对于indexesvals,而不是res,尤其是考虑到reduction是在后者做了什么?

但是,如果是这样,我该如何解决这个问题呢?

c++ parallel-processing vector openmp reduction

5
推荐指数
1
解决办法
3228
查看次数

对象识别 vs 检测 vs 分类?有什么不同?

我不知道这是否是问这个问题的正确 stackexchange 论坛,如果不是这种情况,请告诉我。

我正在开发一个应用程序,该应用程序将包含一幅画的输入图像作为输入,它能够告诉您这幅画的标题。一个类似的情况是:给定一个包含建筑物的输入图像,返回的结果是建筑物的名称。

这是一款什么样的应用?在第一次影响时,我会说“图像分类”之类的东西。我不是计算机视觉专家,但我一直认为“图像分类”类似于“给定图像,告诉我该图像中包含什么”。

另一方面,对象检测定义似乎与识别类的对象(例如建筑物)而不是类本身的实例(例如长城)更相关:

对象检测是一种与计算机视觉和图像处理相关的计算机技术,用于检测数字图像和视频中某个类别(例如人类、建筑物或汽车)的语义对象的实例。

关于物体识别:

物体识别是感知物体物理属性(如形状、颜色和纹理)并将语义属性应用于它(如将物体识别为苹果)的能力。

我真的不知道如何对我所描述的应用程序进行分类(真是个笑话……)。你怎么认为?

classification object-detection computer-vision object-recognition

5
推荐指数
1
解决办法
4112
查看次数