2015-06-02 3 views
0

Мне нужно аккумулировать много 3D-данных (в arma :: vec3), а затем я хочу вычислить его среднее значение. Как это можно сделать быстрее, чем перебирать через каждые данные x, y, z?armadillo Как получить среднее значение vec3

Сейчас я храню свои данные в

std::vector<arma::vec3> data3d; 

, а затем я перебирать вектор, чтобы получить средний

for (auto &v: data3d) { 
    mean_x += v(0); mean_y += v(1); mean_y += v(2); 
} 
mean_x/=data3d.size();mean_y/=data3d.size();mean_z/=data3d.size(); 

Как я могу улучшить это?

ответ

3

Я хотел бы использовать

 
arma::mat dataset(data_points, dim); 

// populate dataset 

arma::rowvec mean_vec = mean (dataset); 

Если нет особых причин, по которым вы храните vec3 объекты в СРР СТЛ vector.

Если вы хотите увеличить матрицу во время выполнения, то вы можете использовать функцию resize. Но я бы предложил не расти по одной строке за раз, instad накапливает строки в буфере, а затем вырабатывает основную матрицу в блоках.

+0

Спасибо. Но может ли это расти динамически? С вектором STL я использую 'reserve()', а затем 'puch_back()' каждую итерацию. Есть ли эквиваленты? – manatttta

+1

Вы можете использовать функцию 'join_rows', но это может быть не очень хорошая идея. Вместо этого вы можете создавать сегменты матрицы данных, например, каждый из которых имеет «n» точек данных, когда один заполняется, затем он переходит ко второму, а затем тот также заполнен, вы можете объединить оба из них в один. Просто просто вычислите среднее значение различных объектов матрицы и возьмите среднее из них. Я лично не буду перебирать, как то, что представляет ваш код. – phoxis

+0

@manatttta: См. Обновленный ответ. – phoxis

Смежные вопросы