MATLAB 2016b如何生成字符串数组?报错问题求助
解决MATLAB旧版本生成固定格式字符串数组的问题
嘿,我帮你分析下你遇到的问题,再给你几个适配旧MATLAB版本的解决方案:
先说说你遇到的错误原因
第一个错误「Subscripted assignment dimension mismatch」:
旧MATLAB版本里,如果没预分配数组,features默认会被当成字符数组(char array),这类数组要求所有行的字符长度必须一致。但你生成的test1是5个字符,test10是6个字符,长度不一样,直接赋值就会触发维度不匹配错误。第二个预分配错误:
features = num2str(zeros(1,80));这行代码生成的是一个包含80个0的长字符串(比如"0 0 0 ... 0"),并不是你需要的数组结构,所以后续赋值自然会出现元素数量不匹配的问题。
适配旧版本的解决方案
方案1:用元胞数组(推荐,兼容所有旧版本)
元胞数组是旧MATLAB处理变长字符串的标准方式,它可以容纳不同长度的字符串,完全避免维度问题:
% 先预分配1×80的元胞数组 features = cell(1, 80); for iter = 1:80 % 用大括号{}给元胞元素赋值 features{iter} = strcat('test', num2str(iter)); end
之后你可以用features{5}来访问第5个字符串"test5"。
方案2:用统一长度的字符数组
如果你一定要用字符数组,那就把所有字符串格式化成相同长度,比如给数字补零到两位,这样每个字符串都是6个字符(testxx):
% 预分配80行×6列的字符数组,每行存一个字符串 features = char(zeros(80, 6)); for iter = 1:80 % 用sprintf格式化,保证数字是两位(不足补零) features(iter, :) = sprintf('test%02d', iter); end
这样生成的就是test01、test02一直到test80的字符数组,每行长度一致,不会报错。
方案3:如果你的版本支持字符串数组(R2016b+)
要是你用的版本不算特别老(R2016b及以后),可以直接用MATLAB的字符串数组,写法更简洁:
% 预分配1×80的字符串数组 features = strings(1, 80); for iter = 1:80 features(iter) = "test" + string(iter); end % 甚至可以不用循环,直接向量化生成 features = "test" + string(1:80);
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

