matlab - 转置 double 和 int64 值的表,无需 int64 转换
问题描述
我在 Matlab 中有一个带有 int64 和双精度值的表(让我们将其命名为 X),我想转置它。X' 导致该错误: '错误使用'(第 213 行)未定义函数'ctranspose' 用于类型'table' 的输入参数。请改用 ROWS2VARS 函数。但是当我使用rows2vars函数时,所有表元素都被转换为 int64。这是一个例子。桌子 :
B1 B2 B3
_____ _____ _____
1.73 3.4 5
1.95 3.2 3
2.38 3.3 2
1.44 3.75 7
5 3.5 1
4.75 3.4 1
2.1 3.2 3
3.2 3.4 2
2.25 3.25 2
1.3 5.25 9
被转置但看起来像这样:
OriginalVariableNames Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10
_____________________ ____ ____ ____ ____ ____ ____ ____ ____ ____ _____
{'B365H'} 2 2 2 1 5 5 2 3 2 1
{'B365D'} 3 3 3 4 4 3 3 3 3 5
{'B365A'} 5 3 2 7 1 1 3 2 2 9
我知道发生这种情况是因为(如 Mathworks 文档中所述)“如果将整数与双精度类、单类或逻辑类结合使用,则生成的矩阵的所有元素都会被赋予最左侧整数的数据类型”。在转置之前,我还使用table2array函数将表转换为矩阵,但随后所有双精度数再次转换为 int64。
有没有办法转置表格但保持所有双精度值不变?
解决方案
您的意思是要保留新行,double
并将它们存储为双精度值,并且 int64s 的新行仍然存在int64
?你不能这样做(除非你做了一些丑陋的事情,比如将它们转换为单元格),因为 Matlabtable
中的列是同质类型的。
如果您希望它们都以双精度结尾,那么只需int64
在进行转换之前将您的列显式转换为双精度即可。与大多数编程语言不同,在 Matlab 中,当您进行混合模式算术或连接时,双精度数隐式缩小为整数,而不是整数加宽为 double,原因不明。
推荐阅读
- javascript - 如何在Angular 2中传递变量以切换手风琴内的特定面板
- php - 用 PHP 发送电子邮件 - 表单
- postgresql - PostgreSQL 按所有字段分组
- python - 需要在列表列表中找到最大值
- jquery - SVG 元素与之前的兄弟 SVG 重叠
- vb.net - vb6 - 使用结构作为类属性类型
- react-native - 在重新启动应用程序不起作用时设置权限
- google-cloud-platform - 如何设置从本地到 Google Cloud VPC 的 VPN
- javascript - JS ClipboardEvent 剪贴板数据始终为空
- angular - Angular 4 - ngFor 下拉/选择选项在 IE11 上非常慢,如何优化 ngDoCheck 执行?