【问题标题】:Pre-allocating the String size in Matlab在 Matlab 中预分配字符串大小
【发布时间】:2013-03-13 23:31:39
【问题描述】:

我非常清楚如何使用一、零和单元格命令预先分配矩阵大小,但是字符串呢?

假设我现在有一个名为 data 的矩阵,其每个值都在 1-255 之间,如果我想打印这些数字的 ASCII 字符而不是它本身的数字,我会这样做,

msg='';

    for i = 1 : length(data)
        msg=horzcat(msg,floor(data(i))); % horzcat doesn't ignore spaces
    end

msg

在上面的代码中,Matlab 在循环结束之前不知道msg 的大小,我真正想做的是在循环开始之前声明变量msg 的大小。

我该怎么做?

【问题讨论】:

  • Matlab 中的字符串只是一个行向量。这有帮助吗?

标签: matlab


【解决方案1】:

您可以像使用矩阵一样使用char 预分配字符串(字符串只是一个字符数组):

msg = char(zeros(100,1));

但是,这可能不是您所需要的(我还没有看到任何人为任何东西预先分配一个字符串)。鉴于这是您想要做的事情

假设我现在有一个名为 data 的矩阵,如果我想打印这些数字的 ASCII 字符而不是它本身的数字,它的每个值都在 1-255 之间

您可以简单地使用char(data) 来显示 ASCII/Unicode 值。

【讨论】:

  • 我试过了,但它在显示为空格的字符串之前填充了不必要的 0,这是因为循环没有覆盖原始向量值,而是将消息填充到该向量中
  • 你说你没有看到任何人预先分配字符串,我也没有。但 Matlab R2011b 不断警告我预先分配它的大小。我知道它没有任何价值,但我只想删除这个警告
  • @Xufyan 正如我所说,这可能不是您需要,但我回答了您提出的问题,即:“如何在 MATLAB 中预分配字符串”。我不完全知道您想要做什么,因为您的代码示例不清楚,所以我按照您在文本中所说的进行。您是否按照我的建议尝试过char(data)?这是您在horzcat 行中尝试使用msg 的最佳解释(它一次将字符串增长一个字符)。如果data 中有浮点数而不是整数,请执行char(floor(data))
  • @SufiyanGhori 如果您正在 rpeallocating 以加快速度,您可能必须开始将其作为字节数组写入...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2022-11-14
相关资源
最近更新 更多