Есть ли способ объединить три двумерных вектора вдоль столбца в C ++, как в python: np.concatenate ([x, y, z], axis = 1)? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь объединить двухмерный вектор в C ++, например, как python:

np.concatenate([x,y,z], axis=1)

Я пробовал приведенный ниже код, но он объединяется по строке.

std::vector<std::vector<int>> dest{{1,2,3,4,5}};
std::vector<std::vector<int>> src{{6,7,8,9,10}};

dest.insert(
  dest.end(),
  src.begin(),
  src.end()
);

Вывод:

1 2 3 4 5 6 7 8 9 10

Но я ожидаю, что это будет как показано ниже:

1 6
2 7
3 8
4 9
5 10

Есть ли обходной путь для выполнения конкатенации вдоль столбца, как в приведенной выше функции python np.concatenate?Я пытаюсь визуализировать данные, поэтому мне нужно переставить все векторы и объединить вдоль столбца.

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать newmat11 для достижения описанного поведения, подобного фитону: http://www.robertnz.net/nm11.htm

std::vector<int > dest{ 1,2,3,4,5 }; 
std::vector<int > src{ 6,7,8,9,10 };
std::vector<int> third{ 11,12,13,14,15 };
Matrix x(5, 3);
x.column(1) << dest.data();
x.column(2) << src.data();
x.column(3) << third.data();
Matrix sub = x.submatrix(1, 5, 1, 2);

std::cout << sub << std::endl;

Создает следующий вывод

1.0   6.0
2.0   7.0
3.0   8.0
4.0   9.0
5.0  10.0

Матрица сохраняет свои значения последовательно, поэтому вы можетеполучите ваш единственный вектор, подобный этому:

std::vector<double> merge(sub.Store(), sub.Store() + sub.size());
for (auto& digit : merge) std::cout << digit << "\t";

, который выдает следующий результат: 1 6 2 7 3 8 4 9 5 10

Самое сложное, что нужно сделать, это:

  1. Загрузка всех необходимых файлов .h и .cpp с домашней страницы
  2. Создание нового проекта, состоящего из файлов newmat11
  3. Сборка в .lib
  4. Добавитьссылка, включите каталог и .lib путь к вашему основному проекту
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...