我有一個關于從矩陣中移除行的問題。我有下面的代碼,可以洗掉我想要的行,但問題是每次洗掉一行都會改變矩陣的大小。當矩陣的大小改變時,for回圈不能再運行原來的矩陣大小,因為它已經改變了。有人知道如何解決這個問題嗎?謝謝。
for i = 1: NT
for j = 1: NP
for k = 1:NP
if ContactPartData((i-1)*(NP*(NP-1)) (((j-1)*NP k),2) == 0
ContactPartData((i-1)*(NP*(NP-1) ((j-1)*NP k), :) = [];
else
結束。
end end
end end
end end
uj5u.com熱心網友回復:
對于這些情況,通常更容易的是記錄你要洗掉的行,然后在最后一次洗掉它們。這比重復洗掉單一行更有效。而且它同時也解決了你的問題!
toremove = false(size(ContactPartData, 1),1)。)
for i = 1: NT
for j = 1: NP
for k = 1:NP
if ContactPartData((i-1)*(NP*(NP-1)) (((j-1)*NP k),2) == 0
toremove((i-1)*(NP*(NP-1) (((j-1)*NP k)) = 真。
結束。
end; end
end end
end 結束
ContactPartData(toremove,:) = [];
當然,在這種特殊情況下,根本就不需要回圈:
toremove = ContactPartData(:,2) == 0;
ContactPartData(toremove,:) = [];
另外,可能反過來做會更有效率,選擇哪些行來保留(花時間看代碼就知道了!):
tokeep = ContactPartData(:,2) ~= 0;
ContactPartData = ContactPartData(tokeep,:);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322421.html
標籤:
