Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“matlab错误”;索引超出了矩阵维度”;使用特定的数据文件_Matlab_Loops_Indexing - Fatal编程技术网

“matlab错误”;索引超出了矩阵维度”;使用特定的数据文件

“matlab错误”;索引超出了矩阵维度”;使用特定的数据文件,matlab,loops,indexing,Matlab,Loops,Indexing,我将以下代码用于不同的数据文件,没有任何问题。但是,有一个文件会产生问题,当我使用该文件运行代码时,我得到一个错误: “索引超出了矩阵维度。” 我认为这是因为“I”等于2546,但当代码运行该行时:I=I+1,而不是在2546处停止,而是继续运行并在2547处停止(给出错误)-这当然超过了矩阵维度。事实上,当代码停止工作并产生错误时,我可以在工作区中看到“I”等于2547,“j”等于2(而不是5,如果循环工作正常的话) 由于完全相同的代码可以很好地处理其他文件,因此我假设与此特定文件有关。对如何

我将以下代码用于不同的数据文件,没有任何问题。但是,有一个文件会产生问题,当我使用该文件运行代码时,我得到一个错误:

“索引超出了矩阵维度。”

我认为这是因为“I”等于2546,但当代码运行该行时:
I=I+1
,而不是在2546处停止,而是继续运行并在2547处停止(给出错误)-这当然超过了矩阵维度。事实上,当代码停止工作并产生错误时,我可以在工作区中看到“I”等于2547,“j”等于2(而不是5,如果循环工作正常的话)

由于完全相同的代码可以很好地处理其他文件,因此我假设与此特定文件有关。对如何解决这个问题有什么见解吗

代码如下:

for i=1:size(colInd,1)
    for j=1:size(colInd,2)
        if colInd(i,j)>0 && colInd(i,j)<=13
            M1(i,j)=Windowsdata(i,colInd(i,j));
        elseif colInd(i,j)==0 | colInd(i,j)==14
            M1(i,j)=NaN;
        elseif colInd(i,j)==-1 | colInd(i,j)==15
            M1(i,:)=NaN;
            i=i+1;
        end
    end
end
Windowsdata中的示例行,2546 x 13双精度

 -4.37370443344116  -1.64714550971985   0.569347918033600   1.62668454647064    3.73541021347046    5.15196514129639    4.04361486434937    1.77491927146912    0.702701866626740   -0.354207783937454  1.18695282936096    2.82701897621155    4.01644039154053
  3.72757863998413  1.44241857528687    -1.15181946754456   -2.97936320304871   -5.16328191757202   -4.25508642196655   -2.47518587112427   0.287524074316025   -1.17596077919006   -2.04023623466492   -2.78539514541626   -2.96725606918335   -5.59557294845581
 -5.52127933502197  -1.69257545471191   3.61181259155273    4.46472501754761    0.345008432865143   -4.78608989715576   -7.80892658233643   -8.83082866668701   -5.61083126068115   -4.40270948410034   -3.05102157592773   -4.67261123657227   -5.50971889495850
  1.24733197689056  0.692575275897980   0.549045324325562   1.33569169044495    2.26527953147888    3.19271230697632    1.92626762390137    -0.00543282041326165    -1.76812970638275   -3.55482935905457   -2.28071475028992   2.58129334449768    6.07476711273193
  2.17950797080994  2.73428583145142    1.63492679595947    -0.256836771965027  -0.773400425910950  -1.04227805137634   -1.82435607910156   -2.64025163650513   -1.53338134288788   -2.29410648345947   -4.26442241668701   -4.76120758056641   -4.47712421417236
 -0.246993020176888 0.157185763120651   0.250829964876175   -0.986824631690979  1.40918886661530    5.03370332717896    8.15515422821045    6.41663646697998    2.43448591232300    -2.98093175888062   -3.53510475158691   -1.89243125915527   1.47953033447266
  4.36318445205688  5.06837177276611    5.78645181655884    6.97499608993530    7.49895095825195    5.27076244354248    4.75153970718384    4.35132837295532    2.37539553642273    0.0745598822832108  0.782306909561157   1.98255372047424    1.82295107841492
  0.393009424209595 0.348423480987549   -0.0242169145494699 -0.451373100280762  0.792472958564758   3.95410203933716    6.95971775054932    6.07247447967529    4.61793804168701    2.25326156616211    1.17793440818787    -1.02191674709320   -1.40514099597931
  2.97367334365845  2.56695508956909    -0.0324615947902203 -0.512259364128113  -0.169182881712914  1.99416732788086    2.05820631980896    1.26427924633026    -0.107465483248234  -1.26579785346985   -2.51656532287598   -2.19553661346436   -1.86673855781555
 -5.92374515533447  -4.78130531311035   -5.02523994445801   -4.12971973419189   -2.56698751449585   -2.16855669021606   -2.66882371902466   -3.24165868759155   -4.10617780685425   -4.71752023696899   -4.63748264312744   -3.33325529098511   -2.00388121604919

如果我理解正确,
colInd
是一个
NxM
矩阵,具有
N=2546
,您有一个期望,在您的上一个elseif中,通过将
I
增加一个,您将在下一个外部for循环迭代中结束,从
1
开始
j
M
(I+1)th迭代


如果这是您想要实现的行为,则需要使用
break
语句中断内部for循环。否则,如果
j请提供完整的错误消息和a。完整的错误消息如我所报告的
索引超出了矩阵维度。
。没有说明我可以报告或引用的行。
索引超过了矩阵维度。
是命令窗口中唯一的内容吗?什么是
Windowsdata
?它与
colInd
有什么关系?请参阅上面链接的帮助页面的“完成”部分。添加
break
我没有得到错误,但是,当该部分运行并完成时,
I
仍然等于2547,
j
现在等于1,这表明代码在第一个循环处停止,并且没有在从2到5的循环中运行。或者,这就是您想要检查的?很明显,
i=2547
,因为您在上一个elseif的内部循环中将
i
增加了1。看来我误解了您对算法的预期行为,因为您没有正确描述您希望它做什么。如果你能给出一个玩具般的例子,说明你的算法失败的情况,并描述你期望从算法中得到的行为,那将非常有帮助。请参阅我在初始答案下面添加的解释。我需要算法做的是在Windowsdata中找到与colInd中的索引相对应的值。但是,如果每行的任何单元格(在colInd中)等于零或14,我想用NaN替换该特定单元格(但不是整行)。如果每行的任何单元格(在colInd中)等于-1或15,我希望整行都是NaN。当我运行生成错误的代码时,它按照算法的功能工作,但它停止了。看起来你的
colInd
向量在第二维度上严格增加。这意味着只有当最后一行包含一个等于
-1
的元素时(并且由于它在第二维度中严格增加,所以只能作为第一个元素出现),或者类似地,如果最后一行第五个元素之前的任何元素等于
15
,才会发生错误。这是您的实现错误,而不是数据错误。你的算法没有完全做到它应该做的。使用一个小玩具示例,并使用调试工具观察其行为。
 -4.37370443344116  -1.64714550971985   0.569347918033600   1.62668454647064    3.73541021347046    5.15196514129639    4.04361486434937    1.77491927146912    0.702701866626740   -0.354207783937454  1.18695282936096    2.82701897621155    4.01644039154053
  3.72757863998413  1.44241857528687    -1.15181946754456   -2.97936320304871   -5.16328191757202   -4.25508642196655   -2.47518587112427   0.287524074316025   -1.17596077919006   -2.04023623466492   -2.78539514541626   -2.96725606918335   -5.59557294845581
 -5.52127933502197  -1.69257545471191   3.61181259155273    4.46472501754761    0.345008432865143   -4.78608989715576   -7.80892658233643   -8.83082866668701   -5.61083126068115   -4.40270948410034   -3.05102157592773   -4.67261123657227   -5.50971889495850
  1.24733197689056  0.692575275897980   0.549045324325562   1.33569169044495    2.26527953147888    3.19271230697632    1.92626762390137    -0.00543282041326165    -1.76812970638275   -3.55482935905457   -2.28071475028992   2.58129334449768    6.07476711273193
  2.17950797080994  2.73428583145142    1.63492679595947    -0.256836771965027  -0.773400425910950  -1.04227805137634   -1.82435607910156   -2.64025163650513   -1.53338134288788   -2.29410648345947   -4.26442241668701   -4.76120758056641   -4.47712421417236
 -0.246993020176888 0.157185763120651   0.250829964876175   -0.986824631690979  1.40918886661530    5.03370332717896    8.15515422821045    6.41663646697998    2.43448591232300    -2.98093175888062   -3.53510475158691   -1.89243125915527   1.47953033447266
  4.36318445205688  5.06837177276611    5.78645181655884    6.97499608993530    7.49895095825195    5.27076244354248    4.75153970718384    4.35132837295532    2.37539553642273    0.0745598822832108  0.782306909561157   1.98255372047424    1.82295107841492
  0.393009424209595 0.348423480987549   -0.0242169145494699 -0.451373100280762  0.792472958564758   3.95410203933716    6.95971775054932    6.07247447967529    4.61793804168701    2.25326156616211    1.17793440818787    -1.02191674709320   -1.40514099597931
  2.97367334365845  2.56695508956909    -0.0324615947902203 -0.512259364128113  -0.169182881712914  1.99416732788086    2.05820631980896    1.26427924633026    -0.107465483248234  -1.26579785346985   -2.51656532287598   -2.19553661346436   -1.86673855781555
 -5.92374515533447  -4.78130531311035   -5.02523994445801   -4.12971973419189   -2.56698751449585   -2.16855669021606   -2.66882371902466   -3.24165868759155   -4.10617780685425   -4.71752023696899   -4.63748264312744   -3.33325529098511   -2.00388121604919
for i=1:size(colInd,1)
    for j=1:size(colInd,2)
        if colInd(i,j)>0 && colInd(i,j)<=13
            M1(i,j)=Windowsdata(i,colInd(i,j));
        elseif colInd(i,j)==0 | colInd(i,j)==14
            M1(i,j)=NaN;
        elseif colInd(i,j)==-1 | colInd(i,j)==15
            M1(i,:)=NaN;
            break;
        end
    end
end
colInd = [ 4  5   6   7   8;
-1  0   1   2   3;
 2  3   4   5   6;
11  12  13  14  15;
 0  1   2   3   4;
 5  6   7   8   9;
 3  4   5   6   7;
 5  6   7   8   9;
-1  0   1   2   3;
11  12  13  14  15;
10  11  12  13  14];

Windowsdata = reshape([1:size(colInd,1)*13],[size(colInd,1) 13]);

M1 = zeros(size(colInd));
M2 = zeros(size(colInd));

c1 = find(colInd>0&colInd<=13);
c2 = find(colInd==0|colInd==14);
c3 = find(colInd==-1|colInd==15);
[x1,~] = ind2sub(size(colInd),c1);
[x3,~] = ind2sub(size(colInd),c3);

M2(c1) = Windowsdata(sub2ind(size(Windowsdata),x1,colInd(c1)));
M2(c2) = NaN;
M2(x3,:) = NaN;
M1 =
 34    45    56    67    78
NaN   NaN   NaN   NaN   NaN
 14    25    36    47    58
NaN   NaN   NaN   NaN   NaN
NaN     5    16    27    38
 50    61    72    83    94
 29    40    51    62    73
 52    63    74    85    96
NaN   NaN   NaN   NaN   NaN
NaN   NaN   NaN   NaN   NaN
110   121   132   143   NaN

M2 =
 34    45    56    67    78
NaN   NaN   NaN   NaN   NaN
 14    25    36    47    58
NaN   NaN   NaN   NaN   NaN
NaN     5    16    27    38
 50    61    72    83    94
 29    40    51    62    73
 52    63    74    85    96
NaN   NaN   NaN   NaN   NaN
NaN   NaN   NaN   NaN   NaN
110   121   132   143   NaN