所以在MATLAB
中,如果我创建一个N x N x N x N x 6
维矩阵,我可以将这些值分配给6个为一组的矩阵:
myMatrix(1,1,1,1,:) = [69, 3, 864, 21, 95, 20];
是否有一种类似的方式在6个字母组中用C ++写入N x N x N x N x 6
维矩阵?
另外,是否有类似的方法将6个元素设置为等于另外6个元素I.eArray(N,N,N,8,:) = myArray(N,N,N,6,:)?
(没有std :: vector解决方案 - 需要保持矩阵的数组形式,因为现有代码是使用c++/CUDA
为数组构建的,并且非常复杂)
答案 0 :(得分:1)
#include <algorithm>
,您可以使用std::copy
:
int myMatrix[N][N][N][N][6];
const int src[6] = {69, 3, 864, 21, 95, 20};
std::copy(std::begin(src), std::end(src), myMatrix[0][0][0][0]);
所以等同于myArray(N,N,N,8,:) = myArray(N,N,N,6,:)
将是:
std::copy(std::begin(myMatrix[N-1][N-1][N-1][5]), // Source start
std::end(myMatrix[N-1][N-1][N-1][5]), // Source end
std::begin(myMatrix[N-1][N-1][N-1][7])); // Dest start
请注意,C / C ++中的索引从0
开始,而不是1
。
答案 1 :(得分:0)
您可以像在matlab中一样分配: 假设你有一个向量:
std::vector<std::vector<std::vector<std::vector<std::vector<int>>>>>> myVector;
假设它已经像这样正确初始化:
myVector(N, std::vector<std::vector<std::vector<std::vector<int>(N, std::vector<std::vector<std::vector<int>(N, std::vector<std::vector<int>(N, std::vector<int>(6, 0)))));
毛。尝试以不同方式执行或使用push_back,这样才有意义。
但是,无论如何,你可以分配最低级别的矢量:
std::vector<int> yourTempVector(6, someNumber);
myVector[1][1][1][1] = yourTempVector;