You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB 2016b如何生成字符串数组?报错问题求助

解决MATLAB旧版本生成固定格式字符串数组的问题

嘿,我帮你分析下你遇到的问题,再给你几个适配旧MATLAB版本的解决方案:

先说说你遇到的错误原因

  1. 第一个错误「Subscripted assignment dimension mismatch」:
    旧MATLAB版本里,如果没预分配数组,features默认会被当成字符数组(char array),这类数组要求所有行的字符长度必须一致。但你生成的test1是5个字符,test10是6个字符,长度不一样,直接赋值就会触发维度不匹配错误。

  2. 第二个预分配错误:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:58:13