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.
(definition) Definition: (1) A division of a set into nonempty disjoint sets that completely cover the set. (2) To rearrange the elements of an array into two (or more) groups, typically, such that elements in the first group are less than a value and elements in the second group are greater.
1. NumPy uses much less memory to store data. The NumPy arrays takes significantly less amount of memory as compared to python lists. It also provides a mechanism of specifying the data types of the contents, which allows further optimisation of the code.
Because the Numpy array is densely packed in memory due to its homogeneous type, it also frees the memory faster. So overall a task executed in Numpy is around 5 to 100 times faster than the standard python list, which is a significant leap in terms of speed.
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.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With