【问题标题】:Automatic Type conversion of row vector in MATLABMATLAB中行向量的自动类型转换
【发布时间】:2020-06-11 20:56:59
【问题描述】:

假设我有一个如下定义的行向量:

x = [5 6.7 8.9]

上面的代码生成了一个行向量,其中所有元素都被类型转换为浮点数(包括第一个索引中的 5)。

x =

   5.0000   6.7000   8.9000

有什么办法可以防止 5 的类型转换(首先存在),即有什么办法可以让我的向量如下:

x =

   5  6.7000   8.9000

5后没有四个小数点。

【问题讨论】:

  • 向量的所有条目必须是相同的类型。无论如何,浮点double 数据类型包括最大为2^53 的整数,所以这应该不是问题。您看到的 4.0000uint32(4) 的值相同(尽管数据类型不同)
  • 普通数组无法做到这一点,但 cell 数组可以。有趣的是,如果我在 Octave 中创建一个像 x = {5 6.7 8.9} 这样的元胞数组,5显示而没有小数点,但它的类仍然是 double
  • 你只关心这里的视觉还是实际的类型转换?
  • @AdityaSaini x = {int32(5) 6.7 8.9}(或您想要的任何整数类型)将创建一个包含一个整数和两个双精度数的元胞数组,如果您正在寻找的话。或者你可以创建一个结构。或两个单独的数组。很多选择。
  • 注意:在此处使用单元格数组 ({...}) 可能会在显示格式方面为您提供所需的内容,但总的来说,使用单元格意味着您的性能会很差。如果可以,请坚持使用数字。

标签: matlab octave matlab-deployment matlab-compiler


【解决方案1】:

在 Matlab 和 Octave 中,double 是所有数值的默认值,即使其中一些值可能是整数(整数)。而对于数值数组,所有元素的类型必须相同。

通常,您应该将所有数值保留为双精度值,并使用格式控件(如 printf() 及其朋友提供的那些)以您想要的方式显示它们。

在这种情况下,您可以执行以下操作:

x = [5 6.7 8.9];
printf('%d  %.04f  %.04f\n', x); 

或者更灵活:

printf('%g  ', x); printf('\n');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2014-09-02
    • 2011-06-13
    • 2011-01-25
    • 2021-09-12
    • 2014-03-10
    相关资源
    最近更新 更多