numpy recarray.partition()函数| Python
在 numpy 中,数组可能具有包含字段的数据类型,类似于电子表格中的列。一个例子是[(a, int), (b, float)]
,其中数组中的每个条目都是一对 (int, float)。通常,使用诸如arr['a'] and arr['b']
类的字典查找来访问这些属性。记录数组允许使用arr.a and arr.b
作为数组成员访问字段。
numpy.recarray.partition()
函数重新排列数组中的元素,使第 k 个位置的元素的值位于排序数组中的位置。所有小于第 k 个元素的元素都被移到这个元素之前,所有等于或大于第 k 个元素的元素都被移到它的后面。
Syntax : numpy.recarray.argpartition(kth, axis=-1, kind='introselect', order=None)
Parameters:
kth : [int or sequence of ints ] Element index to partition by.The kth element value will be in its final sorted position and all smaller elements will be moved before it and all equal or greater elements behind it.
axis : [int or None] Axis along which to sort. If None, the array is flattened before sorting. The default is -1, which sorts along the last axis.
kind : Selection algorithm. Default is ‘introselect’.
order : [str or list of str] When arr is an array with fields defined, this argument specifies which fields to compare first, second, etc.
Return : [ndarray] Partitioned array of the same type and shape as arr.
代码#1:
# Python program explaining
# numpy.recarray.partition() method
# importing numpy as geek
import numpy as geek
# creating input array with 2 different field
in_arr = geek.array([(5.0, 2), (3.0, -4), (6.0, 9),
(9.0, 1), (5.0, 4), (-12.0, -7)],
dtype =[('a', float), ('b', int)])
print ("Input array : ", in_arr)
# convert it to a record array,
# using arr.view(np.recarray)
rec_arr = in_arr.view(geek.recarray)
print("Record array of float: ", rec_arr.a)
print("Record array of int: ", rec_arr.b)
# applying recarray.partition methods
# to float record array
rec_arr.a.partition(kth = 3)
print ("Output partitioned float array : ", rec_arr.a)
# applying recarray.partition methods
# to int record array
rec_arr.b.partition(kth = 4)
print ("Output partitioned int array : ", rec_arr.b)
Input array : [( 5., 2) ( 3., -4) ( 6., 9) ( 9., 1) ( 5., 4) (-12., -7)]
Record array of float: [ 5. 3. 6. 9. 5. -12.]
Record array of int: [ 2 -4 9 1 4 -7]
Output partitioned float array : [ 5. -12. 3. 5. 9. 6.]
Output partitioned int array : [ 1 -7 -4 2 4 9]
代码#2:
我们将numpy.recarray.partition()
应用于整个记录数组。
# Python program explaining
# numpy.recarray.partition() method
# importing numpy as geek
import numpy as geek
# creating input array with 2 different field
in_arr = geek.array([[(5.0, 2), (3.0, 4), (6.0, -7)],
[(9.0, 1), (6.0, 4), (-2.0, -7)]],
dtype =[('a', float), ('b', int)])
print ("Input array : ", in_arr)
# convert it to a record array,
# using arr.view(np.recarray)
rec_arr = in_arr.view(geek.recarray)
# applying recarray.partition methods to record array
rec_arr.partition(kth = 2)
print ("Output array : ", rec_arr)
Input array : [[(5.0, 2) (3.0, 4) (6.0, -7)]
[(9.0, 1) (6.0, 4) (-2.0, -7)]]
Output array : [[(3.0, 4) (5.0, 2) (6.0, -7)]
[(-2.0, -7) (6.0, 4) (9.0, 1)]]