c++ - 如何 reshape 矩阵?

标签 c++ matrix

我目前正在尝试将一些 Python 代码转换为 C++。一个“小”问题是改变矩阵的维度。是否可以在 C++ 中 reshape 矩阵,类似于 Python reshape 函数?

例如,在 Python 中,我可以轻松地使用 numpy 创建一个数组并轻松地 reshape 维度。

a = np.array([[1,2,3],[4,5,6]])
>>> a.reshape(3,2)
array([[1, 2],
       [3, 4],
       [5, 6]])

我如何在 C++ 中做到这一点?也许这是一个简单的问题,但我完全无法做到这一点。我在 Mathere 的 OpenCV 库中看到了这一点然而,事实证明,要与 MinGW 一起正常工作非常困难,更不用说单个功能的大量添加了。如果使用“基本”功能可以做到这一点,那将是理想的。

最佳答案

只要内存是连续放置的(例如纯 C 数组),您可以使用不同的索引重新解释类型:

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

Example

以上只是一个示例,表明问题实际上归结为矩阵类中的内存布局方式

如果您的类在内部使用带有线性索引的 std::vector,则重新解释这些索引以适应您的访问模式就足够了。

关于c++ - 如何 reshape 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719828/

相关文章:

c++ - .pro 文件更改后 Qt 不刷新 Makefile

c++ - 如何在boost::regex中找到子匹配的字符串位置

matrix - 将所有数据文件加载到 Octave 中的目录中

swift - 如何在矩阵的特定位置获取reValue?

C++ 链接器错误未定义对 Linux 上的类定义及其成员函数的引用

c++ - 如何在新元组中提取元组的子集?

c++ - 类型,性质和含义(什么是C++中的“#call”

algorithm - 找到一种最小化两组最大距离的算法,优于贪婪算法

r - 输出FALSE而不是R中的错误

algorithm - 在 bool 矩阵中查找 1 的区域填充