【问题标题】:Matlab,problem with concatenation in an iteration? How do I fix it?Matlab,迭代中的连接问题?我如何解决它?
【发布时间】:2020-03-27 17:12:35
【问题描述】:

我遇到的问题是它只能部分工作,但我可以添加什么使其工作?

A2 = [20 4 6 8 5];
A3 = [10 2 3 4 6];
Str=[];
formatSpec = 'P%d (%d,%d)';
for i=1:length(A2)
    str = char(sprintf (formatSpec, i, A2(i),A3(i)));
    Str=[Str;str];
end
set(handles.text2,'string',Str);

【问题讨论】:

  • 你是什么意思它只能“部分”工作。请详细说明您的问题。
  • 例如,如果其中一个矩阵有 [2 4 6] 而另一个矩阵有 [10 20 30],它可以在那里工作,但是当我在任何一个我得到一个 vertcat 错误,我该如何解决这个问题?

标签: matlab iteration static-text


【解决方案1】:

您不是连接字符串而是连接字符数组。以这种方式思考,它已经回答了您的问题:如果您有一个两位数,则 char-array 比一位数的 char-array 长一个元素......并且您不能连接两个不同的数组垂直大小。

解决方案相当简单:使用实际字符串(在 R2016a 左右引入)。字符串用"" 表示,而不是'',后者是字符。所以用string替换你的char,它工作正常。 (更好的是:提供formatSpecas ""-string,sprintf() 将立即返回一个字符串)

旁注:

顺便说一句,如果你在循环,你应该总是分配内存。这就是为什么Str 有一个橙色的波浪下划线。这是因为 MATLAB 将数组连续存储在 RAM 中,并且必须将其复制到更大的部分,它超出了当前部分。 所以不是Str=[],而是写Str = strings(length(A2),1),并在循环中索引Str(i) = ...

就个人而言,我更喜欢num2str 而不是sprintf,但我不能给出一个很好的理由,除非它在不提供格式的情况下也可以工作。

【讨论】:

  • 对不起,请用翻译器
  • 尝试回答,但最后删除你说的,是一个错误,希望你删除的东西不要发布,但是你说的几乎所有内容都为我服务,只有str = strings(长度 (A2), 1)。我已经不理解这部分,但如果我使用他告诉我的其余部分
  • @Andre3600 你应该事先告诉 MATLAB 你将在向量中放置多少个字符串。正如您循环所建议的那样,它是length(A2) 字符串,因此您可以分配它们。
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多