在 numpy 记录数组中,如何根据记录中的值对元素进行排序?

In a numpy record array, how can you order the elements based off a value in the record?

我有以下 numpy 记录数组。

name       module           offset

filter-2   filter_module    0x000020

filter-3   filter_module    0x000042

filter-1   filter_module    0x000014

我希望能够检测到哪个偏移值最小,并将它们按升序排列。理想的输出是。

name       module           offset

filter-1   filter_module    0x000014

filter-2   filter_module    0x000020

filter-3   filter_module    0x000042

这是我生成这个 numpy 数组的代码

instance_dtype={
    'names' : ('name','module','offset'),
    'formats' : ('U20','U20','U20')}

instance= np.zeros(5,instance_dtype)
i=0

for node in xml_file.iter():
    if node.tag=="instance":
        attribute=node.attrib.get('name')

inst=  (node.attrib.get('name'),node.attrib.get('module'),node.attrib.get('offset'))
        instance[i]=inst
        i=i+1
 print('%10s,%15s,%5s'%tuple(rec))

如何读取偏移值找出最小值,然后重新组织数组以从最小偏移值开始到最大偏移值?

任何 'columns' 都可以通过名称访问:

inst['name']
inst['module']

np.sort 接受一个 order 参数 - 请参阅其文档以获取示例

无需重新创建数组,我认为这应该可行:

inst1 = np.sort(inst, order='offset')

inst1 应打印 'rows' 按 'offset' 排序。

您也可以在特定字段上尝试 argsort

idx = np.argsort(inst['offset'])
inst[idx]