自相似矩阵形成

时间:2014-06-24 09:29:24

标签: c++ matrix

我正在尝试为我的色度特征计算自相似矩阵。 参考this!用于理解自相似矩阵。

色度特征是在每帧的和弦识别时获得的矢量。 现在由于帧的数量非常大(1224097),循环必须运行(n ^ 2)次以形成矩阵,n是帧的数量。 这会导致错误分配问题。 任何人都可以为此提出建议吗? 我可以用循环运行一些n * m次来形成矩阵,但仍能显示正确的结果吗? 或者我可以增加记忆力等等。

这里是我试图编写的代码,用于形成相似度矩阵。 chroma_features是大小等于帧数的向量向量。

for(int ii=0;ii<chroma_features.size();ii++)
    {
        vector<float> tr(chroma_features.size(),0.0);
        similarity_matrix.push_back(tr);
        for(int kk=0;kk<chroma_features.size();kk++)
        {    
            float temp = 0;
            for(int jj=12;jj<24;jj++)  
            {  
                 temp += pow((chroma_features[ii][jj]-chroma_features[kk][jj]),2.0);
            }

             similarity_matrix[ii][kk] = sqrt(temp);

        }
    }

存在问题。 我的基本目标是做到这一点。 我们计算自相似矩阵S = s(i,j) 使用欧氏距离的色度向量序列。这个 矩阵在主对角线上有零。我们将它标准化 因此对于任何i,0 <= s(i,j)<= 1;学家然后我们每行 仅保留M n个最小值并设置所有其他值 为1(这里0 <= M <= 1)。之后我们只保留 那个矩阵的那些平行的对角线段 到主对角线并且长度大于或等于k: s(i + 1; j + 1)&lt; 1 | 0&lt; = l&lt; = k1,k1&gt; = k。得到的矩阵 从某种意义上讲它是“稀疏的”,因为它具有很少的元素 从1开始。 然后我们重新计算色度向量的序列 还有其他办法吗?

0 个答案:

没有答案