Re: [Perldl] Finding K Smallest Number with 2D Indices in Hankel Matrix

2014-10-20 Thread Ronak Agrawal
Thanks Chris and Derek for the optimized method

For unique I was going to use squaretotri() and then sort it
The rle had went out of my mind...

I have a doubt, is it efficient to use the qsort method in large matrix (
say 5000 x 5000)


On Sat, Oct 18, 2014 at 11:21 PM, Chris Marshall devel.chm...@gmail.com
wrote:

 Nice, Derek!  Good catch (it is pretty cool to
 see how powerful a few lines of PDL can be).

 --Chris

 On Fri, Oct 17, 2014 at 3:19 PM, Derek Lamb de...@boulder.swri.edu
 wrote:

 Ronak,

 If you are looking for the smallest 3 unique values, and those are d,
 e, and f, do you want all of the locations where your piddle is d or
 e or f ?  Or if d is the smallest, just 3 d locations?  If the
 latter, then what Chris has will work as-is.  If the former, then you need
 a little bit extra at the beginning:

 $matrix =
 pdl([0,1,2,3,4],[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]);
 $k = 3;
 ($quant,$uniq_vals)=$matrix-flat-qsort-rle; #I am a big fan of
 -qsort-rle. -hist() might work too.
 $num_in_matrix = $quant(0:$k-1)-sum;
 #then Chris's stuff will work
 $smallest_k = zeroes(indx, $num_in_matrix);
 $matrix-flat-minimum_n_ind($smallest_k); #answer gets stuffed into
 $smallest_k
 $coords2D = pdl($matrix-one2nd($smallest_k));
 $smallest_vals = $matrix-range($coords2D-transpose)-flat;

 cheers,
 Derek

 On Oct 17, 2014, at 10:29 AM, Chris Marshall devel.chm...@gmail.com
 wrote:

 Hi-

 First off, you can use the PDL on-line documentation to
 find relevant commands to try:

   pdldoc -a maximum

 or

   pdl apropos maximum

 in the pdl2 or perldl shells includes the following items:

maximum Project via maximum to N-1 dimensions
maximum_ind   Like maximum but returns the index rather than the
 value
maximum_n_ind   Returns the index of `m' maximum elements

 where maximum_n_ind is what you are looking for.  Here is a
 sample pdl2 session showing the calculation.  You can use
 the PDL shells and the online documentation to understand
 fully how it works:


 pdl floor(random(10,10)*10)
 pdl p $m
 [
  [4 7 5 0 6 7 8 4 6 7]
  [0 7 0 2 5 3 0 4 6 6]
  [5 4 3 6 9 5 8 4 4 1]
  [9 6 7 7 4 1 4 2 0 8]
  [5 1 3 3 7 7 1 2 8 5]
  [2 0 8 7 3 1 5 7 7 6]
  [5 9 6 2 7 2 6 7 0 2]
  [6 3 1 1 8 2 1 9 9 9]
  [6 7 9 3 5 2 2 5 9 3]
  [4 5 0 4 7 9 3 3 1 6]
 ]

 pdl $top5 = zeros indx, 5;   # size of $top5 determines n
 pdl $m-flat-maximum_n_ind($top5)  # get top 5 element indexes
 pdl p pdl($m-one2nd($top5))  # convert linear to ND index
 [
  [4 0 1 7 8]
  [2 3 6 7 7]
 ]



 Hope this helps,
 Chris


 On Fri, Oct 17, 2014 at 11:54 AM, Ronak Agrawal ronagra...@gmail.com
 wrote:

 First I would Thank You for your constant help...it has helped me a lot
 in improving my skills
 ---

 I have generated a Hankel Matrix by the following operation

 // $a is a svd and therby this operation will always form Hankel Matrix
 $matrix = $a x transpose($a);

  [image: [a b c d e; b c d e f; c d e f g; d e f g h; e f g h i].]

 I need to find the top K minimum elements ( 2D) with their 2 Dimesional
 indices ..
 Can you suggest me some good approach for this

 I though to do following but it is not optimized
 Converting the Lower triangular Matrix as Bad Values or 0
 Then Finding the mimimum row_wise and column_wise using minimum function

 Thanks





 ___
 Perldl mailing list
 Perldl@jach.hawaii.edu
 http://mailman.jach.hawaii.edu/mailman/listinfo/perldl


 ___
 Perldl mailing list
 Perldl@jach.hawaii.edu
 http://mailman.jach.hawaii.edu/mailman/listinfo/perldl



 ___
 Perldl mailing list
 Perldl@jach.hawaii.edu
 http://mailman.jach.hawaii.edu/mailman/listinfo/perldl



___
Perldl mailing list
Perldl@jach.hawaii.edu
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl


Re: [Perldl] Finding K Smallest Number with 2D Indices in Hankel Matrix

2014-10-20 Thread Chris Marshall
qsort is using quicksort so the performance is that of
quicksort.  It would probably be faster to use maximum_n_ind
with an appropriately large number for N and then use qsort
or uniq to determine which elements you need.

--Chris

On Mon, Oct 20, 2014 at 4:17 AM, Ronak Agrawal ronagra...@gmail.com wrote:

 Thanks Chris and Derek for the optimized method

 For unique I was going to use squaretotri() and then sort it
 The rle had went out of my mind...

 I have a doubt, is it efficient to use the qsort method in large matrix (
 say 5000 x 5000)



___
Perldl mailing list
Perldl@jach.hawaii.edu
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl