尺寸不匹配MatLab;无法弄清楚为什么它不匹配

时间:2012-04-08 06:12:03

标签: matlab for-loop dimension mismatch

我认为这可能是一个语法问题,这是代码。

  load ([ 'C:\Users\Abid\Desktop\Inquiry Runs\dtS' ])
 dtS((dtS==0))=nan;
 for j=2:9;
maxS=max(dtS(j,:));
minS=min(dtS(j,:));

maxval(j,:)=dtS((dtS>(maxS-.1*maxS)));
minval(j,:)=dtS((dtS<(minS+.1*minS)));

avmax(j)=mean(maxval(j,:));
avmin(j)=mean(minval(j,:));

avs(j,:)=[avmax(j) avmin(j)]
 end

所以我知道每个循环的行矩阵都是不同的大小。例如,maxval(j,:)将根据它查找特定值的一行而改变。

我是手动完成的,我发现在第一个循环中矩阵的大小为(1,1),但是,如果我将循环设置为仅运行j = 2,则行长度为13。

通常如果矩阵在循环中改变大小,我只会收到警告,但这次我认为这是由于我不理解的原因。

1 个答案:

答案 0 :(得分:1)

你是对的,问题是maxval(j,:)是一个不同的大小。 length(maxval(j, :))不是length(dtS((dtS>(maxS-.1*maxS))));这会导致一个问题,因为maxval必须是'矩形',但如果它被这行代码扩展,它的某些值将不会被定义。考虑:

x = [1, 2; 3, 4];
x(3, :) = [5, 6, 7];

如果此代码合法,则结果为:

x: [1, 2, ?;
    3, 4, ?;
    5, 6, 7]

由于这些未定义的值,matlab不会让你这样做。您可以改为使用单元格数组:

maxval = cell(9, 1);
avmax = zeros(9, 1);
avs = zeros(9, 2);
for j=2:9;
  maxS=max(dtS(j,:));
  minS=min(dtS(j,:));

  maxval{j} = dtS((dtS>(maxS-.1*maxS)));
  minval{j} = dtS((dtS<(minS+.1*minS)));

  avmax(j)=mean(maxval{j});
  avmin(j)=mean(minval{j});

  avs(j,:)=[avmax(j) avmin(j)]
end