【问题标题】:Avoid multiple calls to fprintf when writing vector of values and newline编写值向量和换行符时避免多次调用 fprintf
【发布时间】:2015-12-04 15:24:49
【问题描述】:

我正在使用fprintf 将向量中的值输出到文本文件。是否可以在打印的每个向量的末尾添加一个换行符而不需要两次调用 fprintf

产生所需输出 1 2 3 4 的示例,但在下面对 fprintf 进行了两次调用。

A = [1 2 3 4];
fprintf('%d ', A)
fprintf('\n')

例如,如果您尝试fprintf('%d \n', A),这将产生在每个打印数字后添加换行符的不良效果:

>> fprintf('%d \n', A)
1 
2 
3 
4 

我是出于普遍的好奇而问的。对性能的影响当然可能很小。

【问题讨论】:

  • 实际上,如果你有很多这样的调用,对性能的影响可能会很大。 MATLAB 的 I/O 函数的旧行为是在每次写入后刷新文件缓冲区。不确定是否仍然如此,但我不认为这些函数是 MathWorks 的优先事项......
  • @CST-Link 等:如果您正在写入文件,有一种禁用自动刷新的方法:High Performance File I/O。我不确定在这种情况下这是否适用于数组参数,或者在其他情况下是否可以禁用自动刷新。
  • 如果您需要良好的性能,您可能应该使用dlmwrite()...

标签: string matlab printf


【解决方案1】:

不是一个优雅的解决方案,但是...

fprintf([repmat('%d ',1,numel(A)) '\n'], A)

或者,正如@nikkola 所说:

fprintf([repmat('%d ',1,numel(A)-1) '%d\n'], A)

删除换行符之前的尾随空格。

【讨论】:

  • @GameOfThrows 非常接近eval :-)
  • 好主意!也许fprintf([repmat('%d ',1,numel(A)-1) '%d\n'], A) 删除换行符之前的尾随空格?
  • @mikkola 好主意,是的!已编辑
  • @LuisMendo 我认为编辑实际上使它比带有两个 fprintf 调用的起始版本更好,我相信它也有尾随空格。
【解决方案2】:

使用sprintf 的另一个不优雅的解决方案:

A = [1 2 3 4];
fprintf('%s\n',sprintf('%d ', A))

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多