[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
- Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/20
- Re: Deleting equal rows/columns in matrix, Ben Abbott, 2010/10/20
- Re: Deleting equal rows/columns in matrix, GFotios, 2010/10/20
- Re: Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/20
- Re: Deleting equal rows/columns in matrix,
Ben Abbott <=
- Re: Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/20
- Re: Deleting equal rows/columns in matrix, Jaroslav Hajek, 2010/10/20
- Re: Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/21
- Re: Deleting equal rows/columns in matrix, Jaroslav Hajek, 2010/10/23
- Re: Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/25
- Re: Deleting equal rows/columns in matrix, AlbFrigerio, 2010/10/20