gpt4 book ai didi

c++ - 如何 reshape 矩阵?

转载 作者:可可西里 更新时间:2023-11-01 18:28:08 27 4
gpt4 key购买 nike

我目前正在尝试将一些 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

以上只是一个例子,表明问题真正归结为内存在矩阵类中的布局方式

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com