有没有办法像python:np.concatenate([x,y,z],axis = 1)那样沿C ++沿列连接三个二维向量?

时间:2019-01-30 15:08:49

标签: c++ multidimensional-array

我正在尝试像python那样在C ++中连接二维矢量:

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 :(得分:1)

您可以使用newmat11实现类似phyton的行为,描述如下: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路径