help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Deleting equal rows/columns in matrix


From: Ben Abbott
Subject: Re: Deleting equal rows/columns in matrix
Date: Wed, 20 Oct 2010 22:31:18 +0800

On Oct 20, 2010, at 10:25 PM, AlbFrigerio wrote:
> 
> Fotios Kasolis wrote:
>> 
>> On Oct 20, 2010, at 3:27 PM, AlbFrigerio wrote:
>> 
>>> Hello world, I got a problem I'm trying to solve on my own, but I  
>>> really
>>> don't know if I would solve it, hence I'm asking "in advance" your  
>>> help.
>>> 
>>> The question is quite simple : is there a (simple) way to delete in  
>>> a matrix
>>> the already existing rows or columns?
>>> 
>>> I might use for loops asking isequal(A(i,:),A(j,:) \forall i,j , but  
>>> I hope
>>> there is a nicer way. I tried to use the outer product with function
>>> @isequal , but I reach results I don't understand :(
>>> Just as an information, I don't have a real matrix, but an integer  
>>> one whose
>>> lines are combination of {0,1,9} . If I got only {0,1} values I  
>>> would have
>>> used binary transformation, but I got three elements and, by the  
>>> way, I'm
>>> looking for the solution of the general problem.
>>> 
>>> Thank you so much, in the rest of the day I'll try to solve it, if I  
>>> don't
>>> reach any solution ... I hope someone of yours do !!
>>> 
>>>  Alberto
>>> -- 
>> 
>> a) If you want to remove entire rows/cols use an assignment to the  
>> empty matrix like
>>> A = repmat (1:5,5,1)
>>> A(:,1) = [] # this line removes the first column
>> 
>> b) Just for your information if you want to conditionally modify  
>> elements use the function find
>>> A = repmat (1:5,5,1)
>>> A(find (A>3)) = 1
>> 
>> the same could be done (without using find) as follows
>>> A = repmat (1:5,5,1)
>>> A(A>3) = 1
>> 
>> To relate the above to your problem you can set for instance a special  
>> value to the elements you want to remove
>>> A = repmat (1:5,5,1)
>>> A(A>3) = nan
>> 
>> and then extract a matrix without those nans by using
>> 
>>> B = A(! isnan(A))
>> 
>> Enjoy!
>> 
>> /Fotios
> 
> Thank you Ben and Fotios, you gave me correct answers, but I believe I have
> not explained well my problem. I don't want to delete "una tantum" a row or
> a column, I want that my program, given the following matrix as input
> 
> A = [1 0 1 0 9 0 1 ; 1 0 1 0 1 9 1 ; 0 1 9 1 0 1 9 ;  1 1 1 1 1 0 9 ; 1 0 1
> 0 1 9 1; 1 1 1 1 0 1 9] 
> 
> deletes the 5th row because it is the same of the 2nd one, or the 4th column
> (equal to the 2nd one). Obviosly it is "easy" to look manually for the
> duplicates in a small matrix like the previous one, but imagine your matrix
> to have more rows and colums.
> 
> Thanks again,
>  Alberto

Take a look at unique().

        help unique

To get the unique rows of a matrix, X, ...

        X = unique (X, "rows")

To get the columns ...

        X = unique (X.', "rows").'

Does that do what you want?

Ben




reply via email to

[Prev in Thread] Current Thread [Next in Thread]