#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] и так далее