Используйте std :: inner_product с многомерными векторами (по столбцам) - PullRequest
0 голосов
/ 01 апреля 2020

Я создал функцию для вычисления стандартного отклонения, используя std::inner_product и лямбда-выражения для op1 и op2 из inner_product для изменения операций функции std::inner_product.

Но я также хотел бы рассчитать стандартное отклонение 2D вектора векторов для каждого столбца. Есть ли способ сделать это так же, как мой код ниже? Мне нужно было бы сделать это в течение l oop для каждого столбца, а затем передать диапазон каждого столбца в функцию inner_product. Но как я могу передать диапазон столбца двумерного вектора в функцию inner_product, чтобы сделать это таким образом?

Надеюсь, вы поможете мне с этим.

Это мой код для одномерного вектора:

#include <numeric>
#include <cmath>

float stdfunc(std::vector<float> const & invector) {
   float mean = std::accumulate(invector.begin(), invector.end(), 0.0) / invector.size();

   float sq_sum = std::inner_product(invector.begin(), invector.end(), invector.begin(), 0.0,
   [](float const & x, float const & y) {return x+y;},
   [mean](float const & x, float const & y) {return (x-mean)*(y-mean);});

   return std::sqrt(sq_sum / (invector.size() - 1));
}

Позвоните на главную:

int main(){
std::vector<float> testv {6,3,2,9,11,44,20};
float stdw = stdfunc(testv);
std::cout << "Standardabw: " << stdw << std::endl;
    return 0;
}

Спасибо!

...