2013-02-26 155 views
1

我有以下代码:MATLAB:从循环值创建矩阵?

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文件中的值,并把它们作为matricies。但是,这段代码只是使用displ的最终值并从那里创建总矩阵。我想将这些输出(displ)总结为一个大矩阵,并保存这些值,我将如何去做这件事?

+0

在for循环之前启用displ为空,并移除'displ = iter;'行。 – 2013-02-26 23:41:22

回答

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) - 如果以后执行的代码假设为true,则出现问题
  2. 我不假定ii的最后一个值是89910 - 首先将值分配给向量,然后找到最后一个值矢量,我回避了这个问题
  3. 我在一次分配中iter所有空间 - 否则,因为它的增长,Matlab的不断无需移动阵列周围可以慢下来了很多
  4. 我以前sprintf生成字符串代表范围 - 我认为它更具可读性,但它是一个风格问题
  5. 我指定返回值xlsread直接到块displ这是正确的大小

我希望这可以帮助。

+0

非常感谢,但我无法得到这个工作,矩阵的第一个块是空的,全部为零 – 2013-02-27 15:30:50

+0

是的,我的代码中有一个错误;我道歉 - 编辑答案以摆脱空白块 - 当我在“xlsread”后指定时查看“displ”的索引。 – Floris 2013-02-27 17:58:28

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 
+0

非常感谢这个作品! – 2013-02-27 12:57:08