首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高这个xlsread for循环的速度?

如何提高这个xlsread for循环的速度?
EN

Stack Overflow用户
提问于 2016-06-16 18:08:44
回答 3查看 919关注 0票数 2

我做了一个脚本,其中包含一个for循环,它从533个不同的excel文件中选择列,并将它们放入矩阵中,以便进行比较,但是这个过程太长了(它昨天运行了3个小时,甚至还不到一半!)。

我知道xlsread天生就很慢,但是有人知道怎样才能让我的脚本运行得更快吗?脚本如下,谢谢!

代码语言:javascript
复制
%Split the data into g's and h's
CRNum = 533; %Number of Carrington Rotation files
A(:,1) = xlsread('CR1643.xlsx','A:A'); % Set harmonic coefficient columns
A(:,2) = xlsread('CR1643.xlsx','B:B');
B(:,1) = xlsread('CR1643.xlsx','A:A');
B(:,2) = xlsread('CR1643.xlsx','B:B');

for k = 1:CRNum
    textFileName = ['CR' num2str(k+1642) '.xlsx'];
A(:,k+2) = xlsread(textFileName,'C:C'); %for g
B(:,k+2) = xlsread(textFileName,'D:D'); %for h
end
EN

回答 3

Stack Overflow用户

发布于 2016-06-16 19:52:56

如果你想经历一个循环,就不要使用xlsread。因为每次您调用excel时,它都会打开excel,然后再关闭excel server,这很耗时。取而代之的是,在循环之前使用actxserver打开actxserver,做你想做的事情,最后在循环结束后关闭excel。有关使用actxserver的一个很好的示例,请在MATLAB help中搜索"Read Spreadsheet Data using Excel as Automation Server"

还可以看看readtable,它比xlsread更快,但生成的是表。

票数 2
EN

Stack Overflow用户

发布于 2016-06-16 18:22:57

最明显的改进似乎是在可能的情况下只加载部分文件。但是,如果这不是一个选项,请尝试只打开每个文件一次是否有帮助(读取所需的所有内容,然后分配它)。

代码语言:javascript
复制
M(:,k+2) = xlsread(textFileName,'C:D');

还要检查你每次读入的量,如果你在第一个文件中读入了很多行,你可能会使A的第一个维度变大,然后你每次读一个文件时都会填满它?

作为额外的:在开始时可以找到一个小但简单的改进。不要使用4个load语句,而是使用1,然后根据结果分配变量。

票数 1
EN

Stack Overflow用户

发布于 2017-06-28 03:34:26

正如在this post中提到的,最容易更改的是将'Basic‘设置为true。这将禁用Excel中的公式和宏等内容,并允许您更快地读取简单的表格。例如,您可以使用:

xlsread('CR1643.xlsx','A:A', 'Basic', true)

当我在一个11,000 x 7的Excel工作表上测试它时,这导致加载时间从大约22秒减少到大约1秒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37856121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档