How do I remove rows if the sum of its cells equals to a specific value?

3 ビュー (過去 30 日間)
Leonardo Rodrigues
Leonardo Rodrigues 2017 年 9 月 30 日
コメント済み: Jan 2017 年 9 月 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
Jan 2017 年 9 月 30 日
"Didn't work" is a weak description of the problem. Prefer to explain, what you observe.
Leonardo Rodrigues
Leonardo Rodrigues 2017 年 9 月 30 日
It doesn't remove any row, it just shows the value of each cell in the matrix.

サインインしてコメントする。

採用された回答

Jan
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
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
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
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 件のコメント
Jan
Jan 2017 年 9 月 30 日
Note that you need the Neural Network Toolbox for removerows.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by