Вычислите стандартное отклонение для многомерного вектора в C

#c #lambda

Вопрос:

 std::vector<std::vector<float>> targetInputs, targetOutputs;
std::ifstream inputData("inputData.txt");
std::ifstream outputData("outputData.txt");
if (!inputData || !outputData) {/*error*/}
std::string line;
while (std::getline(inputData, line))
{
    std::istringstream ss(line);
    targetInputs.emplace_back(std::istream_iterator<float>(ss), std::istream_iterator<float>());
    targetOutputs.emplace_back(std::istream_iterator<float>(ss), std::istream_iterator<float>());
}
inputData.close();
outputData.close();

std::vector<float> inputMean( targetInputs[0].size() );
std::vector<float> inputSTD( targetInputs[0].size() );
std::for_each(targetInputs.begin(), targetInputs.end(),
    [amp;](const std::vector<float>amp; row)
    {
        std::transform(row.begin(), row.end(), inputMean.begin(), inputMean.begin(),
            [](float d1, float d2) { return d1   d2; });
    });
std::cout << "Column means: ";
std::transform(
    inputMean.begin(), inputMean.end(),
    std::ostream_iterator<float>(std::cout, " "),
    [amp;targetInputs](float d) {return d / targetInputs.size(); });

std::for_each(targetInputs.begin(), targetInputs.end(),
    [amp;](const std::vector<float>amp; row)
    {
        std::transform(row.begin(), row.end(), inputSTD.begin(), inputSTD.begin(),
            [amp;inputMean](float d1, float d2) { return d1   pow(d2-inputMean[row],2); });
    });
 

Вектор targetInput был вызван из файлов .txt, содержащих три столбца и более 100 строк. Я пытаюсь получить матрицу среднего значения и матрицу стандартного отклонения с тремя элементами, и я использовал один и тот же формат for_each и преобразования для достижения обоих из них. На самом деле, это прекрасно работает со средним значением, но я понятия не имею, как вызывать каждое входное значение для каждого столбца. Можем ли мы вызвать векторный массив в лямбда-функции?

Комментарии:

1. Я предлагаю попытаться упростить этот вопрос или свести код к минимуму…

2. Пожалуйста, покажите некоторые входные данные и точно опишите, в чем проблема. Ваше текущее описание не совсем понятно.

3. входной файл может быть просто числами с количеством строк и 3 столбцами, а выходной файл-это то же количество строк, что и входной файл с одним столбцом. может быть //входной файл {{1 2 3},{4 5 6},{7 8 9},{1 2 3}} //выходной файл {{1},{2},{3},{4}}

4. @cigien Пытается получить среднее значение входного файла в каждом столбце и разделить его на среднее, поэтому столбец 1 будет разделен с помощью inputMean[0], а столбец 2 будет разделен с помощью inputMean[1] и так далее