MATLAB中xlsread速度慢

3
这是我的MATLAB程序经过优化后的模拟结果。我需要运行这个模拟数十万次(约100,000次)。 The abnormally slow xlsread 因此,我需要一种更快的方式来读取Excel文件。
规格:Excel文件有10000x2个单元格,每次模拟运行从5个不同的Excel文件中读取一个这样的工作表。 更新:我将xlsread设置为基本模式,并通过将输入组合成单个文件来减少调用次数。接下来的目标是xlswrite。啊,那种沉没的感觉。:| Updated Profile Summary 注意:尽管使用dlmread将数据写入CSV文件非常快(大约快20倍),但我需要使用.xls文件提供的单独工作表的便利性。

1
你尝试过修改xlsread函数本身吗?找到相关的脚本文件,复制它,然后关闭在开头发生的错误检查(例如,字符串是否为空等),因为你知道程序的输入始终是一个10000x2单元格的Excel文件。 - Sriram
我会将Excel转换为.mat文件作为单独的批处理过程,这样至少您只需要执行一次。 - Alex
4
ActiveX会消耗大量时间,从而减缓数据的加载速度。虽然不完全确定,但您应该使用选项“basic”来加快加载速度。http://www.mathworks.com/help/techdoc/ref/xlsread.html#inputarg_'basic' - Jirka cigler
Jirka Cigler是正确的。'basic'选项使其运行极快。 - Rich C
我刚刚根据建议更新了新的个人资料。看起来很绿,但希望更绿一些。 :) - OrangeRind
显示剩余2条评论
1个回答

1

如果你需要将Excel表格作为输出,我认为你可能无法从xlswrite中获得太多的信息。

并行化怎么样?

您是否可以访问并行计算工具箱?或者如果您的计算机支持,您可以运行两个MATLAB实例。如果是这样,您可以考虑两种方法:

  1. 第一个进程执行xlsread部分、模拟部分,然后写入mat文件/纯二进制/CSV,以最快的速度保留数据完整性。另一个进程使用xlswrite将mat文件/中间数据文件转换为Excel。

  2. 有N个MATLAB实例/工作者(N取决于您的物理机器容量)。在N个工作者之间并行化整个读取-处理-写入过程。请注意,我不确定当N个工作者调用Excel时Excel会如何扩展!(xlswrite使用activeX/MS Excel来写入数据)。

与任何并行方法一样,您的里程数将取决于模拟的复杂性与所需文件I/O及其性能。


以前没有做过这个。所以立即开始着手处理。如果有任何问题,我会再次处理的。 :) - OrangeRind
谢谢。有很大的改进。然而,出现了一个全新的问题,完全不同于之前的问题。所以我会接受这个答案,并单独发布新的问题。 - OrangeRind
连接问题在这里 - https://dev59.com/QlfUa4cB1Zd3GeqPLMik需要让它更快。 :) - OrangeRind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接