Есть ли способ повысить производительность симметричных матриц, используя Armadillo в C ++? - PullRequest
1 голос
/ 26 сентября 2019

Я использую 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 ++ и программировании в целом.

...