强制数组维持类型' double'在matlab中连接多个混合数值类型值时

时间:2014-08-22 16:14:46

标签: matlab

在matlab中,有什么方法可以在连接各种数字类型(如doubleuint64时强制数组保持类型uint32

例如,以下代码生成:

>> timestamp = uint64(12);    % 1x1 uint64
>> t_id = uint32(3);          % 1x1 uint32
>> t_value = double(1.5);     % 1x1 double

>> frame = [ timestamp, t_id, t_value ];    % 1x3 uint64

frame =

          12           3           2

我想要的时候:

frame =

  12.000000000000000   3.000000000000000   1.500000000000000

我知道我可以使用double()转换变量,但在我的应用程序中,数组要大得多,而且很多元素都是整数类型。有没有办法在不手动转换每个整数的情况下执行此操作?

如果有帮助,变量就是我代码中struct个数组的字段。

1 个答案:

答案 0 :(得分:3)

您可以轻松编写一个函数来为您进行转换。以下功能可以做到这一点。但请注意,他们使用单元格(为了允许任意数量的输入,通过varargin),所以它们可能不会非常快。

  1. 如果您想连接水平(如您的示例所示):

    function out = horzcatdouble(varargin)
    v = cellfun(@double, varargin, 'uniformoutput', false);
    out = [v{:}];
    

    示例:

    >> horzcatdouble( uint16([1 2]), 3.7 )
    ans =
        1.0000    2.0000    3.7000
    
  2. 如果您想指定要连接的维度(就像使用cat函数一样):

    function out = catdouble(dim, varargin)
    v = cellfun(@double, varargin, 'uniformoutput', false);
    out = cat(dim, v{:});
    

    示例:

    >> catdouble(2, uint16([1 2]), 3.7 )
    ans =
        1.0000    2.0000    3.7000