[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: Deleting rows in matrices

**From**: |
CdeMills |

**Subject**: |
Re: Deleting rows in matrices |

**Date**: |
Tue, 13 Sep 2011 05:49:08 -0700 (PDT) |

MMolloy wrote:
>* *
>* Hi,*
>* *
>* I am having (another!) problem on a seemingly innocuous task. Say I*
>* have many (le x 1) matrices, A, B, C, ......, all of the same length*
>* "le". I want to check each of the elements in "A", and if an element*
>* exceeds a limit I want to delete that row, plus the corresponding rows*
>* in B, C, ...., . Here's my try..*
>* *
>* le = length(A)*
>* for i = 1:le*
>* if (A(i,1) > 5)*
>* A(i,:) = [];*
>* B(i,:) = [];*
>* C(i,:) = [];*
>* .....*
>* endif*
>* endfor*
>* *
>* But I keep getting errors that say the index exceeds the matrix*
>* dimension - I understand why, it's obvious, but I can't think of*
>* another method to do this!*
>* *
>* *
The problem is rather simple. You initialise le with the length of A, then
delete rows. This change A size, but this is not reflected in le. Apart from
the obvious solution given, you can rewrite your loop as
le = 1; while le <= length(A)
if (A(le, 1) > 5)
A(le, :) = [];
else
le = le + 1;
endif
This way:
- if you delete a row, you don't touch le, because it's the row number of
the NEXT untested line after deletion
- otherwise, you use standard increment
In both cases, le is tested against the length of A at each iteration. This
way, you can't access unexistent lines.
Regards
Pascal
--
View this message in context:
http://octave.1599824.n4.nabble.com/Deleting-rows-in-matrices-tp3809655p3809969.html
Sent from the Octave - General mailing list archive at Nabble.com.