我怎么能解决“指数在位置2超出数组边界”for循环/ if语句?

161(30天)
W =细胞(p, 1);
j = 1: (p - 1);
w =(指数(j):指数(j + 1) 2);
W {j} = W;
结束
W2 =细胞(p, 1);
j = 1: (p - 1);
w2 =(指数(j):指数(j + 1) 2);
W2 {j} = W2;
结束
Z =细胞(p, 1);
2 = 1:p
P1 = W {ii, 1};
Z {ii, 1} = P1(三3:结束);
结束
2 = 1:p
P2 Z = {ii, 1};
如果P2(结束,1)> 0
W2 (2,1) = {[]};
结束
结束
我得到错误”指数在位置2超出数组边界”线如果P2(结束,1)> 0
W2矩阵看起来如何我希望它看起来我只是不知道如何停止它产生一个错误。
4评论
安德鲁·斯塔克
安德鲁·斯塔克 2020年11月6日
目前这是一个临时变量,但最终我将稍后使用Z !非常感谢你的帮助!

登录置评。

接受的答案

Sindar
Sindar 2020年11月6日
好吧,我相信这段代码等同于你所拥有的,清洁的,没有错误
%预先分配与细胞[]数组
W =细胞(p, 1);
W2 =细胞(p, 1);
Z =细胞(p, 1);
2 = 1:p
%但最后指数,
%负载的一部分
如果二< p
P1 =(指数(ii):(指数(2 + 1)2));
%的最后一个,不加载任何叶空的
%,但我们希望P1的定义
其他的
P1 = [];
结束
W {2} = P1;
%是显式复制W
%可能还有内部Matlab技巧,用这种方式节省一些内存
W2 (ii) = W (ii);
Z {2} = P1(三3:结束);
如果~ isempty (P1) & & Z{二}(结束)> 0
W2 (ii) = {[]};
结束
结束
一些小窍门:
  • 而不是单独的循环,合并成一个
  • 在过去,额外的迭代W1/W2,明确离开电池空(这里你可以别的)
  • 避免包装和拆包相同的单元格数据
  • 你可以索引的细胞Z,避免了P2临时变量
  • isempty检查避免原来的错误。在这种情况下,细胞已经是空的,无论如何

更多的答案(0)

类别

找到更多的在循环和条件语句帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!