Я использую Armadillo для матричных вычислений в c ++, чтобы вычислить расстояние между всеми частицами в плоскости ax, 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 ++ и программировании в целом.