调用修改结构体的MATLAB函数时出现数据类型异常问题求助
解决MATLAB中测试序列类型被强制转为double的问题
核心问题出在数组初始化阶段:你用zeros()生成了默认的double类型数组v,后续即使给元素赋值为logical、single等类型,MATLAB会自动将这些值转换为数组本身的double类型,导致最终所有测试序列都变成了double。
解决方案:按目标类型初始化数组
不要用通用的zeros(),而是根据inportType指定的类型,初始化对应类型的数组。这样后续赋值时,MATLAB会自动将数值转换为数组的目标类型,而不是反过来覆盖数组类型。
修改后的完整代码
function [slxStimStruct] = slxStim(schedTime,inportType,struct) time = 0:schedTime:10; N = length(inportType); stim = cell(1,N); for i=1:N % 关键:按输入类型初始化对应类型的数组v v = cast(zeros(1, length(time)-1), inportType(i)); for j=1:length(time)-1 switch inportType(i) case {'boolean','logical'} v(j) = randi([0 1],1); case 'single' v(j) = randn(); case 'uint8' v(j) = randi([0 255],1); % 补充你需要支持的其他数据类型 otherwise v(j) = randn(); % 未定义类型默认用double逻辑 end end stim{i} = v; end struct.stim = stim; slxStimStruct = struct;
关键说明
cast函数的作用:通过cast(zeros(...), 类型字符串)可以直接生成指定类型的数组,避免了逐个写switch判断初始化的冗余代码,只要inportType中的字符串是MATLAB合法的数值类型名称(如'int32'、'double'等)都能生效。- 赋值时的类型转换:数组类型确定后,赋值的数值会自动转换为数组的类型。比如给
single类型的数组赋值randn()(double),MATLAB会自动将其转为single存入数组,不会改变数组本身的类型。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

