首页 > 解决方案 > 转置 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。

有没有办法转置表格但保持所有双精度值不变?

标签: matlabtranspose

解决方案


您的意思是要保留新行,double并将它们存储为双精度值,并且 int64s 的新行仍然存在int64?你不能这样做(除非你做了一些丑陋的事情,比如将它们转换为单元格),因为 Matlabtable中的列是同质类型的。

如果您希望它们都以双精度结尾,那么只需int64在进行转换之前将您的列显式转换为双精度即可。与大多数编程语言不同,在 Matlab 中,当您进行混合模式算术或连接时,双精度数隐式缩小为整数,而不是整数加宽为 double,原因不明。


推荐阅读