[Solved] how numpy partition work

I am trying to figure out how np.partition function works.
For example, consider

arr = np.array([ 5, 4, 1, 0, -1, -3, -4, 0])

If I call np.partition(arr, kth=2), I got

np.array([-4, -3, -1, 0, 1, 4, 5, 0])

I expect that after partition array will splits into elements less one, one and elements greater one.
But the second zero placed on the last array position, which isn’t its right place after partition.

Solution #1:

The documentation says:

Creates a copy of the array with its elements rearranged in such a way that
the value of the element in kth position is in the position it would be in
a sorted array. All elements smaller than the kth element are moved before
this element and all equal or greater are moved behind it. The ordering of
the elements in the two partitions is undefined.

In the example you give, you have selected 2th element of the sorted list (starting from zero), which is -1, and it seems to be in the right position if the array was sorted.

Respondent: J. P. Petersen
Solution #2:

The docs talk of ‘a sorted array’.

np.partition starts by sorting the elements in the array provided. In this case the original array is:

arr = [ 5,  4,  1,  0, -1, -3, -4,  0]

When sorted, we have:

arr_sorted = [-4 -3 -1  0  0  1  4  5]

Hence the call, np.partition(arr, kth=2), will actually have the kth as the the element in position 2 of the arr_sorted, not arr. The element is correctly picked as -1.

Respondent: Gathide
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.