具有行主矩阵特征 C++ 的平方欧几里得距离

Squared Euclidean distance with Row Major Matrix Eigen C++

由于我计划使用 pybind11 将 numpy 数组传递到我的 C++ 代码中,自然我想使用 Row Major 矩阵进行计算。我在堆栈

上找到了平方欧几里得距离的(一个线性)实现
typedef Eigen::MatrixXd Matrix;
void squared_dist(const Matrix& X1, const Matrix& X2, Matrix& D) {
    D = ((-2 * X1.transpose() * X2).colwise() + X1.colwise().squaredNorm().transpose()).rowwise() + X2.colwise().squaredNorm();
}

但这需要X1、X2和D是默认的列主矩阵。我将如何为 Row Major Matrices 实现类似的一行?

您可以使用该单行函数的模板化版本,以便它可以接受 RowMajor 和 ColMajor Eigen::Matrix 参数:

template<class T>
void squared_dist(const T& X1, const T& X2, T& D) {
    D = ((-2 * X1.transpose() * X2).colwise() + X1.colwise().squaredNorm().transpose()).rowwise() + X2.colwise().squaredNorm();
}

This godbolt demo 展示了如何在代码中使用该函数。