我正在使用Armadillo在c ++中进行矩阵计算,以便计算x,y平面中所有粒子之间的距离。我正在使用以下类,其中myParticls &pSystem
是另一个类,其中包含有关所有已创建粒子的信息。
class DistMatrix
{
private:
arma::Mat<float> _X;
arma::Mat<float> _Y;
public:
DistMatrix(myParticls &pSystem)
{
_X = arma::repmat(pSystem.x(), pSystem.size(), 1);
_Y = arma::repmat(pSystem.y(), pSystem.size(), 1);
}
arma::Mat<float> DistanceMatrix()
{
return arma::sqrt(arma::square(_X - _X.t()) + arma::square(_Y - _Y.t()));
}
};
结果矩阵是一个对称矩阵,根据定义,我将要应用的一半运算将浪费处理能力和内存。我的问题是,有没有办法防止重复操作来提高性能?
我尝试修剪矩阵的上部并将其类型更改为稀疏矩阵,但这只会降低性能。我是c ++的新手,也是一般编程的人。