C++ 计算密集特征::矩阵中所有行之间距离的最快方法

C++ 计算密集特征::矩阵中所有行之间距离的最快方法,c++,performance,eigen,C++,Performance,Eigen,我试图用特征值计算1000x1000矩阵中每对行之间的欧几里德距离。到目前为止,我得到的是以下几点: for (int i = 0; i < matrix.rows(); ++i){ VectorXd refRow = matrix.row(i); for (int j = i+1; j < matrix.rows(); ++j){ VectorXd eleRow = matrix.row(j); euclid_

我试图用特征值计算1000x1000矩阵中每对行之间的欧几里德距离。到目前为止,我得到的是以下几点:

for (int i = 0; i < matrix.rows(); ++i){
    VectorXd refRow = matrix.row(i);
    for (int j = i+1; j < matrix.rows(); ++j){
        VectorXd eleRow = matrix.row(j);            
        euclid_distance = (refRow - eleRow).lpNorm<2>();
        ...
    }
}
for(int i=0;i
我的代码包括其他代码,这里用“…”替换,但为了测试性能,我删除了它

现在我不希望它以光速运行,但它比我预期的要快得多。使用C++可能会减慢这个特性库吗?
是否有其他首选方法?

您是否能够指定矩阵的长度?从缓存效率的角度来看,您应该使用行主排序,这不是默认的。实际上,我自己刚刚发现了这一点,并尝试切换它,仍在等待计时结果进行比较,但在遍历矩阵时,您仍需要很长时间来复制行;不要那样做。明确使用
.row()
值;Eigen的表达式模板引擎应该有效地实现这一点(即,它将引用已经存在的矩阵中的值,而不是复制它们)。例如:
euclid_距离=(matrix.row(i)-matrix.row(j)).lpNorm()同样,我会定义一个很长的时间。您是否启用了优化功能?VS2013在默认发布模式设置下运行良好,1000x1000矩阵需要4.5分钟,我是否期望过高(我知道应该需要一段时间)?