在matlab中,有什么方法可以在连接各种数字类型(如double
和uint64
时强制数组保持类型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
个数组的字段。
答案 0 :(得分:3)
您可以轻松编写一个函数来为您进行转换。以下功能可以做到这一点。但请注意,他们使用单元格(为了允许任意数量的输入,通过varargin
),所以它们可能不会非常快。
如果您想连接水平(如您的示例所示):
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
如果您想指定要连接的维度(就像使用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