MATLAB:从for循环值创建矩阵?

时间:2013-02-26 23:38:48

标签: matlab loops matrix

我有以下代码:

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)合计为一个大矩阵,一路上保存值,我将如何做到这一点?

2 个答案:

答案 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

几点:

  1. 我不想将i用作变量,因为built insqrt(-1) - 如果您稍后执行假定为真的代码,则您会遇到麻烦
  2. 我不假设ii的最后一个值是89910 - 先将值赋给矢量,然后找到矢量中的最后一个值,我回避这个问题
  3. 我一次分配iter中的所有空格 - 否则,随着它的增长,Matlab不得不移动阵列,这可能会减慢很多事情。
  4. 我使用sprintf生成代表范围的字符串 - 我认为它更具可读性,但它是一个风格问题
  5. 我将xlsread的返回值直接分配给displ中尺寸合适的块
  6. 我希望这会有所帮助。