1

我有以下代码:

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)汇总为一个大矩阵保存值,我将如何做呢?

4

2 回答 2

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
于 2013-02-26T23:43:28.453 回答
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

几点:

  1. 我不喜欢i用作变量,因为它built in就像sqrt(-1)- 如果你稍后执行假设为真的代码,你就有麻烦了
  2. 我不是假设的最后一个值ii89910- 通过首先将值分配给一个向量,然后找到向量中的最后一个值,我回避了这个问题
  3. 我一次分配所有空间iter- 否则,随着它的增长,Matlab 必须不断移动数组,这会大大减慢速度
  4. 我曾经sprintf生成表示范围的字符串 - 我认为它更具可读性,但这是一个风格问题
  5. 我将返回值xlsread直接分配给displ大小合适的块

我希望这有帮助。

于 2013-02-27T00:12:49.003 回答