我有以下代码:
for i = 1450:9740:89910
n = i+495;
range = ['B',num2str(i),':','H',num2str(n)];
iter = xlsread('BrokenDisplacements.xlsx' , range);
displ = iter;
displ = [displ; iter];
end
从我想要的多个范围中获取Excel文件中的值,并将它们输出为基质。但是,此代码仅使用displ的最终值并从那里创建总矩阵。我想将这些输出(displ)合计为一个大矩阵,一路上保存值,我将如何做到这一点?
答案 0 :(得分:1)
这个怎么样:
displ=[];
for i = 1450:9740:89910
n = i+495;
range = ['B',num2str(i),':','H',num2str(n)];
iter = xlsread('BrokenDisplacements.xlsx' , range);
displ = [displ; iter];
end
答案 1 :(得分:1)
由于您知道正在阅读的数据块的大小,因此您可以使代码更加高效,如下所示:
firstVals = 1450:9740:89910;
displ = zeros((firstVals(end) - firstVals(1) + 1 + 496), 7);
for ii = firstVals
n = ii + 495;
range = sprintf('B%d:H%d', ii, ii+495);
displ((ii:ii+495)-firstVals(1)+1,:) = xlsread('BrokenDiplacements.xlsx', range);
end
几点:
i
用作变量,因为built in
为sqrt(-1)
- 如果您稍后执行假定为真的代码,则您会遇到麻烦ii
的最后一个值是89910
- 先将值赋给矢量,然后找到矢量中的最后一个值,我回避这个问题iter
中的所有空格 - 否则,随着它的增长,Matlab不得不移动阵列,这可能会减慢很多事情。sprintf
生成代表范围的字符串 - 我认为它更具可读性,但它是一个风格问题xlsread
的返回值直接分配给displ
中尺寸合适的块我希望这会有所帮助。