#c #matlab #loops #matrix
#c #matlab #циклы #матрица
Вопрос:
Привет, я новичок в C и пытаюсь сделать что-то, что очень легко сделать с Matlab. У меня есть цикл for, который вычисляет вектор. Затем я хотел бы сохранить этот вектор, чтобы я мог получить к нему доступ вне цикла.
for(ii=0; ii < numObs; ii } {
someVector = ...
someMatrix[ii][:] = someVector
}
someMatrix [ii][:], конечно, не работает, но это то, что я хотел бы сделать. Любая помощь приветствуется, спасибо!
Уточнение: someVector — это вектор размером 1xn элементов, который вычисляется каждый раз в цикле. Я просто хочу сохранить его либо в матрице, либо в массиве (не уверен, в чем именно), чтобы я мог вызвать someMatrix [ii] и получить вектор обратно.
Комментарии:
1. Вектор — это не то же самое, что матрица. Пожалуйста, уточните, хотите ли вы использовать какую-либо реализацию
matrix
илиvector
.2. К вашему сведению, могу я предложить заглянуть в собственный файл. Отличная библиотека линейной алгебры, которая должна быть удобной для пользователей Matlab.
3. Также взгляните на библиотеку Armadillo c , синтаксис которой намеренно похож на Matlab.
Ответ №1:
Вы, вероятно, ищете что-то вроде:
std::vector<std::vector<double>> matrix; // matrix - vector of vectors
for(int i = 0; i < numObs; i) {
std::vector<double> vec = ... // your calculations go here
// if no C 11 - don't use std::move
matrix.push_back(std::move(vec));
}
Одним из недостатков здесь является то, что вы должны гарантировать в коде вычисления, что каждый vector
будет иметь одинаковое количество элементов (приведенный выше код это не проверяет).
Обратите внимание, что это определенно не оптимальный способ обработки матриц, и я бы порекомендовал вам взглянуть на некоторые специализированные библиотеки (boost:: numeric, OpenCV для обработки изображений, Armadillo или одну из дюжины других), если вы хотите выполнить серьезные вычисления на нем.
Комментарии:
1.
emplace_back
в этом примере нет разницы. vec уже создан.2. @Dam моя ошибка, это должно было быть
std::move
(идея заключалась в том, чтобы избежать копирования). Спасибо за уведомление