[Eigen中文文档] Reshape操作

这篇具有很好参考价值的文章主要介绍了[Eigen中文文档] Reshape操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文档总目录

英文原文(Reshape)

Eigen3.4 开始,Eigen 发布了将矩阵或向量重塑为不同大小的便捷方法。所有的操作可以通过 DenseBase::reshaped(NRowsType,NColsType)DenseBase::reshaped() 两个函数完成。这些函数并不直接改变原有的变量,而是返回一个重塑后的变量副本。

二维Reshape

更一般的 reshap 转换是通过 reshaped(nrows,ncols) 处理的。这是一个将 4x4 矩阵重塑为 2x8 矩阵的示例:

// 代码索引 3-8-1-1
Matrix4i m = Matrix4i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;

输出:

Here is the matrix m:
 7  9 -5 -3
-2 -6  1  0
 6 -3  0  9
 6  6  3  9
Here is m.reshaped(2, 8):
 7  6  9 -3 -5  0 -3  9
-2  6 -6  6  1  3  0  9

默认情况下,无论输入表达式的存储顺序如何,输入元素始终按列优先顺序处理。有关排序、编译时大小和自动大小归约的更多信息,请参阅 DenseBase::reshaped(NRowsType,NColsType) 的文档,其中包含所有详细信息和许多示例(没找到文档,只找到源码,在Eigen/src/plugins/ReshapedMethods.h中)。

一维线性Reshape

reshape的一个非常常见的用法是将给定的二维矩阵或表达式变为一维线性的形式。在这种情况下,可以计算出维度,因此可以省略相关传参,如下例所示:

// 代码索引 3-8-1-2
Matrix4i m = Matrix4i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is m.reshaped().transpose():" << endl << m.reshaped().transpose() << endl;
cout << "Here is m.reshaped<RowMajor>().transpose():  " << endl << m.reshaped<RowMajor>().transpose() << endl;

输出:

Here is the matrix m:
 7  9 -5 -3
-2 -6  1  0
 6 -3  0  9
 6  6  3  9
Here is m.reshaped().transpose():
 7 -2  6  6  9 -6 -3  6 -5  1  0  3 -3  0  9  9
Here is m.reshaped<RowMajor>().transpose():  
 7  9 -5 -3 -2 -6  1  0  6 -3  0  9  6  6  3  9

.transpose() 方法始终返回列向量,默认情况下,元素始终按列优先排序。同样,请参阅 DenseBase::reshaped() 的文档以获得对排序的更多信息。

原地Reshape

上述示例都是另外创建一个reshape对象,但怎么将一个给定矩阵原地reshape呢?这个操作只适用于具有运行时维度的矩阵和数组。通常这可以通过 PlainObjectBase::resize(Index,Index) 来完成:

// 代码索引 3-8-2-1
MatrixXi m = Matrix4i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;
m.resize(2,8);
cout << "Here is the matrix m after m.resize(2,8):" << endl << m << endl;

输出:

Here is the matrix m:
 7  9 -5 -3
-2 -6  1  0
 6 -3  0  9
 6  6  3  9
Here is m.reshaped(2, 8):
 7  6  9 -3 -5  0 -3  9
-2  6 -6  6  1  3  0  9
Here is the matrix m after m.resize(2,8):
 7  6  9 -3 -5  0 -3  9
-2  6 -6  6  1  3  0  9

但是请注意,与 reshaped 不同,resize 的结果取决于输入的存储顺序。因此它的行为类似于 reshaped<AutoOrder>

// 代码索引 3-8-2-2
Matrix<int,Dynamic,Dynamic,RowMajor> m = Matrix4i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;
cout << "Here is m.reshaped<AutoOrder>(2, 8):" << endl << m.reshaped<AutoOrder>(2, 8) << endl;
m.resize(2,8);
cout << "Here is the matrix m after m.resize(2,8):" << endl << m << endl;

输出:

Here is the matrix m:
 7 -2  6  6
 9 -6 -3  6
-5  1  0  3
-3  0  9  9
Here is m.reshaped(2, 8):
 7 -5 -2  1  6  0  6  3
 9 -3 -6  0 -3  9  6  9
Here is m.reshaped<AutoOrder>(2, 8):
 7 -2  6  6  9 -6 -3  6
-5  1  0  3 -3  0  9  9
Here is the matrix m after m.resize(2,8):
 7 -2  6  6  9 -6 -3  6
-5  1  0  3 -3  0  9  9

最后,目前不支持将reshape处理后的矩阵分配给自身,也不支持由于别名而导致未定义的行为。禁止以下行为:

A = A.reshaped(2,8);

但这样是可以的:文章来源地址https://www.toymoban.com/news/detail-416165.html

A = A.reshaped(2,8).eval(); 

到了这里,关于[Eigen中文文档] Reshape操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Eigen中文文档] 矩阵与向量运算

    专栏总目录 英文原文(Matrix and vector arithmetic) 本文章旨在提供有关如何使用 Eigen 在矩阵、向量和标量之间执行算术操作的概述和一些详细信息。 介绍 Eigen 通过重载常见的 C++ 算术运算符(如 + 、 - 、 * )或通过特殊方法(如 dot() 、 cross() 等)提供矩阵/向量算术运算。对于

    2024年01月24日
    浏览(36)
  • [Eigen中文文档] 线性代数与分解

    文档总目录 英文原文(Linear algebra and decomposition) 本节说明如何求解线性系统,计算各种分解,如 LU 、 QR 、 SVD 、 特征分解 …… 求解基本线性系统 问题 :有一个方程组,写成矩阵方程如下: A x = b Ax = b A x = b 其中 A A A 和 b b b 是矩阵(作为一种特殊情况, b b b 也可以是一个

    2024年02月07日
    浏览(33)
  • 银河麒麟服务器操作系统修改系统默认语言(如从英文改为中文)

    在安装操作系统的时候选择了英文,使用的时候感觉不太方便,想要把语言环境改成中文; 银河麒麟高级服务器操作系统V10 SP3 1、查看系统默认语言 2、使用localectl命令设定系统语言为中文 3、重启系统

    2024年02月04日
    浏览(49)
  • Android修行手册-POI操作中文API文档

    Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总 游戏脚本-辅助自动化 Android控件全解手册 再战Android系列 Scratch编程案例 软考全系列 Unity3D学习专栏 蓝桥系列 ChatGPT和AIGC 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等

    2024年01月16日
    浏览(37)
  • NumPy--reshape、切片操作、copy函数

    ⛳reshape方法和flatten、ravel方法 reshape 用于改变数组的形状和维度 flatten 用于将多维数组展平为一维数组 。该方法返回一个新的一维数组,其中包含了原始数组中的所有元素,按照原始数组的元素顺序排列。 注意 reshape 方法返回的是一个新的数组对象,原始数组并没有被修改

    2024年02月16日
    浏览(29)
  • Linux中如何切换中文英文

    查看当前使用的是中文(zh_CN.UTF-8)还是英文(LANG=\\\"en_US.UTF-8): echo $LANG 进入etc文件: cd /etc 使用vim编辑器进入初始配置的locale.conf文件: vim locale.conf 可以看到我目前的locale.conf文件中只有中文,如图: 目前为vim编辑器的命令模式,按 i 切换到输入模式才能进行自由编辑(切换成功

    2024年02月04日
    浏览(29)
  • 【自己改了的,亲测有效!!!】windows10修改中文用户名成英文,修改C盘用户下的中文名为英文。修改cmd命令下user/uname即中文用户名为英文(我电脑是家庭版)

    因为中文用户名下载不了东西的,look! 步骤如下: 1.windows+R:输入regedit打开注册表。 进入如下目录: 计算机HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList 查看ProfileList下的几个子目录,找到含中文用户名路径的那个(一般是最长的那个),将路径里面的中文用户

    2023年04月08日
    浏览(43)
  • 怎么把中文用户名改成英文?

    我们的c盘存放的是我们系统的文件,有些用户没有键盘分盘,软件游戏也在其中,因为名字是中文,需要更改成英文,那么win11怎么把中文用户名改成英文?很多小伙伴都想要了解,下面就来看看具体的操作。 第一步:开启管理员账户 点击“开始”,在搜索框中输入 cmd。

    2023年04月10日
    浏览(29)
  • Maya英文界面怎么改为中文界面

    Maya 是一款3D动画和视觉效果软件,用于创建逼真的角色和大片般的效果,也是受到电影、电视和游戏行业的 3D 建模师、动画师、照明艺术家和 VFX 艺术家等多数人喜爱的一款3D软件。我们在使用Maya的过程中,常常会遇到一些小阻碍, 比如Maya中英文如何切换?Maya怎么英文改中

    2023年04月26日
    浏览(29)
  • ImageNet1000分类,英文原版,中文翻译版

    在训练模型时,可以用imagenet或者 CIFAR进行分类训练,下面是一些分类介绍 imagenet官网网址 1-398:动物 399-924:物品 925-1000:食物 CIFAR10官网 这些分类是完全互斥的。比如“汽车”包括轿车、SUV 等。“卡车”只包括大型卡车,不包括皮卡车。 两个分类是无重叠的 CIFAR100官网

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包