C сохраняет вектор в массиве во время цикла

#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 (идея заключалась в том, чтобы избежать копирования). Спасибо за уведомление