在循环中运行时代码出错,但在循环外运行时没有

时间:2014-04-17 18:48:39

标签: matlab

嗨,谢谢你查看我的问题。

我有一个大型电子表格(超过650,000行),我试图将其吐入结构的不同部分。我试图通过其中一列中有1132个唯一文本值的值将其拆分。其余的列是数字的。我已经创建了一个数值矩阵,其中包含4个名为“SectionID_Matrix”的列,以及一个文本列的单元格数组,我希望通过名为“ELR”来分割数据。我也试图通过我将它们拆分的文本值来命名结构中的部分。我的代码如下:

ELR_list = unique (ELR);
[m,~]=size(ELR_list);
n = 1;
b = [];

for j = 1:m
x = strcmp(ELR_list(n), char(ELR));
b(:,1) = SectionID_Matrix(x(:,1),1);
b(:,2) = SectionID_Matrix(x(:,1),2);
b(:,3) = SectionID_Matrix(x(:,1),3);
b(:,4) = SectionID_Matrix(x(:,1),4);
t = char(ELR_list(n));
s.(t) = b;
n = n+1;
end

clearvars -except *ELR_list* *ELR* *SectionID_Matrix* *s*

当我运行此代码时,我收到错误消息“订阅分配维度不匹配”。 Sorting_Out_Locations出错(第10行)。 b(:,1)= SectionID_Matrix(x(:,1),1);

这让我感到困惑,因为当我删除for循环并手动更改n的值时,它可以很好地为我提供结构中的矩阵,其中所有行都包含第n个文本值和文本值的名称

我理解错误是由于尝试将更多元素分配给矩阵或矢量的某个部分而不是该部分可以容纳但我不明白它发生在哪里。

我的代码中是否存在导致for循环失败的错误?因为根据我的有限理解,循环应该每次增加n加1,直到它经历了所有独特的ELR值。<​​/ p>

这是我第一次使用Matlab(所以我的代码上的任何指针都非常受欢迎)并且花了整个下午试图让这个工作正常但没有多少互联网帮助或matlab网站正在帮助。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

在您的代码中,第一次运行循环时,b矩阵的大小是根据x中true值的数量设置的。下次它循环时,可能是不同的大小,所以你得到不匹配。

您可以使用b = []

清除每次循环迭代结束时的b

答案 1 :(得分:0)

当您尝试将特定大小的矩阵插入到不同大小的矩阵中时,会出现错误Subscripted assignment dimension mismatch。对于您的代码,这意味着在行

b(:,1) = SectionID_Matrix(x(:,1),1);

尝试插入不匹配的尺寸:SectionID_Matrix(x(:,1),1)的尺寸和b(:,1)的尺寸不同。这很可能是因为您只使用SectionID_Matrix的逻辑索引来获取x每列的某些值。要解决此问题,您需要在b中使用相同的逻辑索引:

b(x(:,1),1) = SectionID_Matrix(x(:,1),1);