octave-maintainers
[Top][All Lists]
Advanced

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

Re: performance problem with unique on sparse arrays


From: David Bateman
Subject: Re: performance problem with unique on sparse arrays
Date: Mon, 01 Mar 2010 21:51:36 +0100
User-agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706)

John W. Eaton wrote:
On  1-Mar-2010, David Bateman wrote:

| sub-dividing your example a bit with the example
| | octave:1> n=1e5;d=0.01;y=floor(10*sprand(n,1,d));tic; x1 = y(1:n-1); | toc; tic; x2 = y(2:n); toc; tic; match = (x1 == x2);toc; tic; idx= | find(match); toc; tic; y(idx) = [];toc
| Elapsed time is 1.09358 seconds.
| Elapsed time is 1.06628 seconds.
| Elapsed time is 0.003949 seconds.
| Elapsed time is 0.011372 seconds.
| Elapsed time is 0.291622 seconds.
| | it seems that is that the "Sparse<T>::index (const idx_vector&, int) | const" method is slow but the maybe_delete_elements method is a bit slow | as well. Note that Jaroslav accelerated the Array<T>::index methods in | 3.2.x by reworking the idx_vector class to do the indexing. The | Sparse<T> class didn't get the same treatment. | | I suppose we can just special case the contiguous index vector of a | sparse vector case in the sparse index and maybe_delete_elements method | to get this to be faster and the attached patch does this with the result | | octave:1> n=1e5;d=0.01;y=floor(10*sprand(n,1,d));tic; x1 = y(1:n-1); | toc; tic; x2 = y(2:n); toc; tic; match = (x1 == x2);toc; tic; idx= | find(match); toc; tic; y(idx) = [];toc
| Elapsed time is 0.00018991 seconds.
| Elapsed time is 0.00011495 seconds.
| Elapsed time is 0.0079711 seconds.
| Elapsed time is 0.023946 seconds.
| Elapsed time is 0.039251 seconds.
| | Is this improvement sufficient to make your change to the unique | function obsolete? If it does I'll work it up as a changeset

Yes, this brings the performance of the unique example much closer to
the full case, so with it, I would remove my previous change to
unique.m.

It looks like your patch is relative to a version of Sparse.cc from
before the great untabifying.  I'm attaching a version relative to the
current sources, which should apply cleanly to the current sources.
Yeah that is why I couldn't give you a version against the tip.. I'll update, rework with your patch and commit it

Cheers
David



reply via email to

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