help-octave
[Top][All Lists]
Advanced

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

removing replicated rows from a (large) matrix


From: Joao Cardoso
Subject: removing replicated rows from a (large) matrix
Date: Fri, 04 Aug 2000 21:34:09 +0100

Hi,

I often need to remove repeated rows from a matrix. I use the following
script, which is the fastest I could think about (I have not checked
Knuth).

Is there a faster method?

Thanks,
Joao

function ix_del = unique(data)

# ix = unique(data)
#
# return the indexes of identical rows entries in `data',
# leaving out one repeated example.
#
# Executing `data(unique(data),:) = []', will leave `data' with unique
rows,

if (isempty(data))
        ix_del = [];
        return
endif

if (columns(data) == 1)
        data = [data data]; # the alg. fail if columns(data) == 1
endif

[t ix] = sort(data(:,1));
data = data(ix,:);                      # organize data as blocks

nr = rows(data);

ix_del = []; t = ones(nr,1);

for i=1:nr
    if (any(i==ix_del))         # already matched
        continue
    endif
    
    ixx = find(data(i,1) == data(i+1:nr,1));    # get a block
    if (isempty(ixx))
       continue
    endif
    
    ixxx = find(all((data(i+ixx,:) ==
ones(length(ixx),1)*data(i,:))'))+i;
    ix_del = [ix_del ixxx];
endfor

ix_del = ix(ix_del);

endfunction



-----------------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.che.wisc.edu/octave/octave.html
How to fund new projects:  http://www.che.wisc.edu/octave/funding.html
Subscription information:  http://www.che.wisc.edu/octave/archive.html
-----------------------------------------------------------------------



reply via email to

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