Thanks for the code and for pointing out the issue. Glad that it's on the
radar for a future enhancement.
--Pete
On Monday, August 11, 2014 10:22:45 AM UTC-7, Peter Simon wrote:
>
> Greetings.
>
> I didn't find any built-in function to return the indices for the unique
> rows in a matrix, so I tried rolling my own. I looked at, but didn't
> understand, the highly macro-ized, arbitrary dimensional code in the
> built-in unique() function. I did discover hashing, though, from looking
> at that code. Here is what I have so far:
>
> function uniquerowindices2{T}(a::Matrix{T})
> rowhash = Uint64[hash(a[k,:]) for k = 1:size(a,1)]
> hu = unique(rowhash)
> ind = zeros(Int,length(hu))
> k1 = 1
> for m = 1:length(ind)
> for k = k1:length(rowhash)
> if rowhash[k] == hu[m]
> ind[m] = k
> k1 = k
> break
> end
> end
> end
> return ind
> end
>
> This is quite a bit faster than my first effort, where I was comparing
> rows, rather than row hashes, but I'm betting someone out there has a much
> better way. Thanks in advance,
>
> --Peter
>