How do I remove rows if the sum of its cells equals to a specific value?
3 ビュー (過去 30 日間)
古いコメントを表示
I have a big matrix with lots of useless rows ( when the sum of the row = -104000 ). How do I remove these rows based on this condition?
I tried this:
v=1:1:NUMBER_OF_ROWS;
if sum(A(v,:)) == -104000;
A(v,:) = [];
end
but it didn't work.
2 件のコメント
Jan
2017 年 9 月 30 日
"Didn't work" is a weak description of the problem. Prefer to explain, what you observe.
採用された回答
Jan
2017 年 9 月 30 日
編集済み: Jan
2017 年 9 月 30 日
This works fluently without a loop:
toDelete = (sum(A, 2) == -104000);
A(toDelete, :) = [];
Your loop has the problem, that if a v.th row has been removed, processing the (v+1).th row will leave out the new v.th row. In addition you cannot run the loop until NUMBER_OF_ROWS, if you have removed rows already, because then A(NUMBER_OF_ROWS, :) does not exist anymore.
A (bad) solution would be to run the loop in backward direction:
for v = NUMBER_OF_ROWS:-1:1
if sum(A(v,:)) == -104000
A(v,:) = [];
end
end
But then Matlab has to create a new array every time a row is removed and this requires a huge amount of resources. This is equivalent to letting an array grow iteratively. Search for "pre-allocation" in this forum.
3 件のコメント
Image Analyst
2017 年 9 月 30 日
Av is the name of the array - what you called A.
Since "remove" is a built-in method (function), you might want to call it "rowsToDelete" instead of "remove".
Jan
2017 年 9 月 30 日
"Av" was a typo, use "A" instead.
@Image Analyst: Thanks for pointing this out. I did not use containers.Map yet, so I was not aware that "remove" is a Matlab command now.
その他の回答 (1 件)
Marco
2017 年 9 月 30 日
Hello Leonardo, you can use the "removerows" function: https://it.mathworks.com/help/nnet/ref/removerows.html
You can see also this link: https://it.mathworks.com/matlabcentral/answers/41762-delete-row-from-matrix
BR Marco
1 件のコメント
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!