加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何重塑矩阵?

发布时间:2020-12-16 03:25:44 所属栏目:百科 来源:网络整理
导读:我目前正在尝试将一些 Python代码转换为C语言.一个“
我目前正在尝试将一些 Python代码转换为C语言.一个“小”问题是改变矩阵的尺寸.是否有可能重塑C中的矩阵,类似于Python重塑函数?

例如,在Python中,我可以轻松地创建一个带有numpy的数组,并轻松地重塑这些维度.

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

我怎么能在C中这样做?也许这是一个简单的问题,但我完全无法做到这一点.我已经在Matc类here的OpenCV库中看到了这一点,但事实证明使用MinGW非常困难,更不用说单个函数的大量添加了.如果“基本”功能可以实现这一点,那将是理想的选择.

解决方法

就内存连续放置(例如普通C数组),您可以使用不同的索引重新解释类型:
int array[2][3] =   {   { 1,3 },{ 4,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< int>在内部使用线性索引,重新解释这些索引以满足您的访问模式就足够了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读