массивы — C ++ эквивалент списка R

Ищите что-то в C ++ для удобного хранения и доступа к матрицам разных размеров. Я обычно использую R, а в R я могу использовать цикл и сохранять матрицу в списке следующим образом (игрушечный пример)

myList <- list(1)
for(i in 1:10){
myList[[i]] <- matrix(rnorm(i^2),i,i)
}

Это дает мне список, где myList [[i]] даст мне i-ю матрицу. Есть ли что-нибудь подобное в C ++? Я видел функции Boost, которые могут создавать массивы разных размеров, но не могут применять их к матрицам. Попытка использовать Eigen или Armadillo, если это помогает сузить ответы.

0

Решение

В ответе, который вы ищете, есть 2 части, т.е.

  1. Матрицы.
  2. Контейнер, содержащий все эти матрицы.

Итак, для матриц: если вы планируете выполнять операции линейной алгебры, я бы рекомендовал использовать некоторые специальные библиотеки, такие как броненосец которая поставляется с множеством предопределенных матричных функций (например, собственное значение, умножение матрицы и т. д.). Если это просто базовое хранение 2D данных без специальных операций, то я бы рекомендовал использовать вектор STL вектора для представления ваших матриц. Эти контейнеры имеют динамический размер (могут быть изменены по желанию во время выполнения), и все элементы доступны по индексу. Как сказал Патрик, больше информации можно найти здесь: cppreference.com.

Пример матрицы целых чисел 3×3, заполненной 1 с, будет

std::vector< std::vector<int,int> > matrix(3,std::vector<int>(3,1));

Затем вы должны хранить эти матрицы где-то. Для этого это действительно будет зависеть от ваших потребностей. Самое простое решение — это вектор матриц (то есть, действительно, вектор вектора). Ваш код будет вести себя точно так же, как в R, и вы сможете получить доступ к матрице по индексу. Эквивалентный код C ++

#include<vector>
using namespace std;
typedef  vector< vector<int,int> > int_matrix_t;
...
vector<int_matrix_t> my_vector_of_matrices(10);
for (int i = 0; i<10; ++i) {
my_vector_of_matrices[i] = some_function_that_outputs_a_matrix(i);
}

Но есть много других доступных контейнеров. Вы должны опросить этот график и выбери для себя!

2

Другие решения

Я считаю, что вы можете использовать std :: vector.

http://en.cppreference.com/w/cpp/container/vector

std::vector<Matrix> matrices;
matrices[i] = Matrix(data);
1

По вопросам рекламы [email protected]