I am currently trying to convert some Python code into C++. One 'small' problem is changing the dimensions of a matrix. Is it possible to reshape a matrix in C++ similar to the Python reshape
function?
For example, in Python I can easily create an array with numpy
and easily reshape the dimensions.
a = np.array([[1,2,3],[4,5,6]])
>>> a.reshape(3,2)
array([[1, 2],
[3, 4],
[5, 6]])
How could I do this in C++? Perhaps this is a simple question but I am completely unable to do this. I have seen this within OpenCV library with the Mat
class here however it is proving to be insanely difficult to work properly with MinGW, not to mention a very large addition for a single function. It would be ideal if this was possible with 'base' functions.
As far as the memory is laid contiguously (e.g. plain C arrays), you can reinterpret the type with different indices:
int array[2][3] = { { 1, 2, 3 },
{ 4, 5, 6 }
};
// Reinterpret the array with different indices
int(*array_pointer)[3][2] = reinterpret_cast<int(*)[3][2]>(array);
for (int x = 0; x < 3; ++x) {
for (int y = 0; y < 2; ++y)
std::cout << (*array_pointer)[x][y] << " ";
std::cout << std::endl;
}
// Output:
// 1 2
// 3 4
// 5 6
The above is just an example to show that the issue really boils down to how memory is laid out in your matrix class.
In case your class uses a std::vector<int>
internally with linear indices, it is sufficient to reinterpret those indices to suit your access patterns.