首页 > 解决方案 > 从模型优化绘图:代码架构

问题描述

好的,我有一个关于如何有效地布局代码的问题。

我有一个用 python 编写的模型,它生成我用来在 matplotlib 中生成图形的结果。正如所写,模型包含在一个文件中,我还有 15 个其他运行文件,它们通过复杂的配置调用它并生成图形。浏览和运行每个运行文件需要一段时间,但由于它们都使用了完全不同的模型设置,所以无论如何我都需要复杂的设置文件,而且一切正常。

我已经为可以在学术论文中出现的数字设置了输出。我现在意识到我将再次需要其他格式的这些图形 - 一个用于演示(低 dpi,中等大小,不同字体),一个用于海报(高 dpi,更大,再次使用不同的字体。)

这意味着每次我想对我的模型进行更改时,我可能有 45 个奇怪的文件需要遍历。我还必须剪切和粘贴大量样板 matplotlib 代码,并进行少量改动(每个运行文件将变成 3 个不同的文件 - 每个图形一个)。

任何人都可以向我解释如何(以及是否)我可以加快速度吗?目前,我认为我花费的时间比它应该的要长得多。

正如我所看到的,有3个主要选项:

  1. 为每个实际的模型运行设置 3 个运行文件(因此复制相当数量,并且运行模型比我需要的要多得多),但我可以独立调整所有内容(但可能会丢失一些重要的东西)。
  2. 添加另一层 - 因此将结果保存为 .csv 或等效文件,然后将它们读入文件以生成图形。这意味着更多的文件,但我只需要每 3 个图形运行一次模型(这可能会节省一些时间)。
  3. 保持图形和模型参数文件的集成,但添加另一个设置图形模板的文件,所以每次我运行文件时它都会吐出 3 个图形)它可能会加快速度,并且肯定会减少文件数量,但它们会变得非常大(并且可能更复杂)。
  4. 别的东西。。

任何人都可以指出我的资源或就如何最好地处理这个问题向我提供一些建议吗?

谢谢!

标签: pythonmatplotlibarchitecture

解决方案


我想你很接近找到你想要的东西。

如果计算需要一些时间,请将结果存储在文件中以供以后处理而无需重新计算。

最重要的是:将代码与配置分开,而不是复制粘贴这种混合的变体。

如果模型带参数,则定义模型类。也许只将模型实例化一次,但模型知道如何load_configread_input_data并且run。模型也可以write_results。这样,您可以为每个配置和输入数据循环一系列load_config, read_data, 。write_results

例如,使用 ini 格式手动编写配置文件并使用confiparser模块加载它们。

为您的Graph班级做类似的事情。将模板定义放在配置文件中,包括输出格式、大小字体等。

最后,您将能够使用使用此设施的单个脚本“管理”预期的工作流程。可能将相关配置文件、输出模板和输入数据组存储在一起,每个建模会话的每个文件夹一组。


推荐阅读