【问题标题】:Avoid list being truncated by Matlab避免列表被 Matlab 截断
【发布时间】:2013-07-10 12:41:43
【问题描述】:

编辑 1 - 这个问题已经解决,这是由于 Floris 发现了一个错字。

我在 Matlab 中有一个单行矩阵,它被截断并导致我丢失数据。

我的代码如下:

[status,Vf_rpm_string] = system (fragment_velocity_string);
Vf_rpm_shape=regexprep(Vf_rpm_string,'\n',' ');
Vf_rpm_vector=str2num(Vf_rpm_string);
Vf_rpm= reshape(Vf_rpm_vector,[],1);

代码执行系统命令并存储结果,结果是一个数字矩阵,有时矩阵中的最后一行比前几行少。 Matlab 不喜欢这样,因为它不知道如何处理最后一行中的几列空白。所以我必须从结果(\n) 中删除换行符并用空格替换它。

这工作正常,直到系统命令的结果太大,所以当我删除新行字符 (\n) 并将其替换为创建单行矩阵的空格时,它对于 Matlab 来说太长并且它会截断它我丢失了很多数据。因此,当我将返回的数据(作为字符串返回)转换为数字时,它会给我一个空矩阵,那么此时 reshape 命令毫无意义。

这是它在 Matlab 中的读取方式:

 20.65866342... Output truncated.  Text exceeds maximum line length of 25,000 characters for Command Window display.

所以 20.65866342 是我开始丢失数据之前的最后一个值。我知道它说它对于命令窗口来说太大了,但变量仍然没有存储所有数据并且它丢失了。

有没有人有任何解决方案来避免这种截断? 或者有人想为我推荐一种替代方法来转换我的数据吗?

我正在使用 Matlab 2012b 和 Windows 7

感谢您的宝贵时间。

【问题讨论】:

  • 当你查看Vf_rpm_string的大小时,你得到了什么?
  • size(Vf_rpm_string) 返回 ` 1 和 131800 ` 它不显示 'and' 但空格不断被删除,所以我用它来说明。
  • 这意味着字符串没有被截断——只有控制台的输出被截断了。你的代码运行后size(Vf_rpm)的结果是什么?
  • size(Vf_rpm) 返回0 and 1size(Vf_rpm_vector) 返回0 and 0
  • 所以这意味着我的问题在于Vf_rpm_vector=str2num(Vf_rpm_string);

标签: matlab system


【解决方案1】:

问题可能是您剥离了换行符,但剥离的字符串不是您正在解析的字符串?

[status,Vf_rpm_string] = system (fragment_velocity_string);
Vf_rpm_shape=regexprep(Vf_rpm_string,'\n',' ');
Vf_rpm_vector=str2num(Vf_rpm_string);
Vf_rpm= reshape(Vf_rpm_vector,[],1);

第三行代码应该是

    Vf_rpm_vector=str2num(Vf_rpm_shape);

如果我理解你的代码逻辑。

【讨论】:

  • 多么简单而恼人的错误。非常感谢您指出 Floris。
  • 如果我犯的每一个“简单而烦人的错误”都能得到一美元……很高兴能提供帮助!
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2012-07-25
  • 2011-09-07
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多