【问题标题】:MATLAB: Creating a matrix from for loop values?MATLAB:从 for 循环值创建矩阵?
【发布时间】:2013-02-26 23:38:47
【问题描述】:

我有以下代码:

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) 汇总到一个大矩阵中保存值,我该怎么做呢?

【问题讨论】:

  • 在 for 循环之前启用 displ 为空并删除 displ = iter; 行。

标签: matlab loops matrix


【解决方案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) - 如果您稍后执行假设为 true 的代码,您就有麻烦了
  2. 我并不是假设ii 的最后一个值是89910 - 通过首先将值分配给一个向量,然后找到向量中的最后一个值,我回避了这个问题
  3. 我一次分配iter 中的所有空间 - 否则,随着它的增长,Matlab 必须不断移动数组,这会大大减慢速度
  4. 我使用sprintf 生成表示范围的字符串 - 我认为它更具可读性,但这是样式问题
  5. 我将xlsread 的返回值直接分配给displ 中大小合适的块

我希望这会有所帮助。

【讨论】:

  • 非常感谢,但我无法让它工作,矩阵的第一个块是空的,全为零
  • 是的,我的代码有错误;我很抱歉 - 编辑了答案以摆脱空块 - 当我在 xlsread 之后分配时,请参阅 displ 的索引。
【解决方案2】:

这个怎么样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多