【问题标题】:Optimizing the print function in MatlabMatlab中的打印功能优化
【发布时间】:2015-12-17 22:48:04
【问题描述】:

我维护了一个自动提取数据的软件包。导入原始数据时,会对其进行绘图并将数据的一些图形保存到磁盘。不幸的是,print 函数大大降低了我的性能。

这里是代码性能的细分

Script       Time
myscript     9.091s
uichoosefile 3.567s
print        4.178s
legend       0.751s

我的执行时间只有大约 3/4 秒是真正的处理时间,print 是这里最大的时间槽。

print 内部,两行几乎占用了 100% 的时间

Line Code                                Time
212  pj = pj = alternatePrintPath(pj);   3.173s
148  drawnow;                            0.751s

如何创建不受这两行限制的print 的优化版本?简单的优化例程(例如降低图形分辨率)是不可取的。

【问题讨论】:

  • print 是一个可以做很多事情的大型函数。你怎么称呼它?请提供示例代码来演示您正在尝试执行的操作。
  • 此时您是否需要将图形保存为光栅格式(PNG、JPG 或者您正在导出它们),或者您可以使用 hgsave 保存 .fig 文件并将其推迟到以后舞台?
  • @txpaulm 不幸的是,我没有限制矢量或光栅格式的奢侈。提取数据时,还会提取客户的配置文件,其中指定了数据图的交付格式,PNG、PDF、SVG、EPS 等。PDF+PNG 是最典型的场景。在执行过程中发出命令时打印非常有问题,所以我不认为推迟保存是非常可行的;它可能会破裂,例如操作员在保存例程期间单击。

标签: matlab optimization file-io graphics save


【解决方案1】:

Matlab 其实很特别,它的内部功能很容易优化。 I did thisode15s 在我编写的 systems biology modelling 工具箱中。

这是你自己做的:

  1. 创建一个新文件夹。我就叫它image_print
  2. 将该文件夹添加到 Matlab 路径,以便您可以在任何地方使用它addpath('image_print')
  3. 将您要优化的功能复制到新文件夹image_print 中,并为文件命名。我就叫它printimage.m
  4. 在原来函数所在的文件夹中,会有一个名为private的文件夹。将该文件夹复制到您的新文件夹image_print。保持名称为private

现在您可以使用 printimage 并对其进行优化,而不会搞砸 Matlab 的其余部分。真正有什么帮助将完全取决于您的实际工作流程,并且需要您有相当多的聪明才智。您正在使用分析器从正确的位置开始。基本上,您必须通过反复试验来弄清楚缓慢的步骤在做什么,然后看看是否有更快的方法来专门为您的工作做这件事。原始功能非常通用,因此您可以将整个部分切掉。别忘了private中的函数也可以修改。

额外建议:由于您只想将图形保存到磁盘,因此您可能需要专注于防止它们浪费时间实际绘制到屏幕上。您也许可以完全注释掉 drawnow 行,但请报告实际发生的情况。

【讨论】:

  • 你说这很容易吗? ....*重复直到所有缺少的功能* ...我认为你的意思是我希望这一切都是讽刺的言论
  • @percusse 命名另一种可以在 10 分钟内修改 print 的语言。
  • Python, Javascript, R. 如果你在matlab里10分钟搞定,我又开始用了
猜你喜欢
  • 2015-04-23
  • 2011-10-12
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多