具有行主矩阵特征 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 展示了如何在代码中使用该函数。
由于我计划使用 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 展示了如何在代码中使用该函数。