循环索引问题

4次观看(最近30天)
问候大家,
我正在尝试使用此代码进行简单的循环:
为了k = 1:size(rm_zerohoras,1)
为了j = 1:size(Finati,1)
如果rm_zerohoras(k)== finati.data(j)
Finati(J,:) = [];
结尾
结尾
结尾
rm_zerohoras包含我需要从Finati中删除的数据。我的目的是,每当循环在Finati的一行上找到相应的DateTime时,整个行都会在Finati上删除。我将同时附加RM_Zerohoras和Finati,以更好地理解。当前的问题是,当我运行程序时,出现以下错误:
“使用表格/dotparenReference的错误(第108行)
索引超过数组元素的数量(474)。”
我认为这与Finati的大小有关,Finati每当循环通过时就会收缩。但是我该如何克服这一点呢?
提前致谢,
亚瑟。

接受的答案

亚历克斯·麦克劳利(Alex McAulley)
避免循环的一种简单方法是:
idx = ismember(finati.data,rm_zerohoras);
Finati(IDX,:) = [];

更多答案(1)

亚当
亚当 2020年3月9日
计算您要删除的所有行的索引,然后一口气删除它们,例如
Rowstodelete = [1 5 7 8];
Finati(Rowstodelete,:)= [];
有一种计算这些索引的媒介方法,但如果不是简单地将它们存储在循环中,而不是实际删除行。
如果事件的数量不是巨大的,尽管它会发出代码警告,但在循环中生长一系列零件的成本可以忽略不计。
您切勿删除您正在向前迭代的数组的元素 - 它永远不会结束。如果您向后迭代,您可以做到这一点,但是我的第一个建议仍然要干净得多,因为一次删除行要比一口气删除它们要慢得多。
1条评论
亚瑟·罗密(Arthur Romeu)
谢谢!
您的解释真的很清楚。我学到了很多!

登录发表评论。

下载188bet金宝搏

社区寻宝

在Matlab Central中找到宝藏,发现社区如何为您提供帮助!

开始狩猎!