按子字段对Numpy数组排序

按子字段对Numpy数组排序,numpy,Numpy,我有一个结构化的numpy数组,其中一个字段有子字段: import numpy, string, random dtype = [('name', 'a10'), ('id', 'i4'), ('size', [('length', 'f8'), ('width', 'f8')])] a = numpy.zeros(10, dtype = dtype) for idx in range(len(a)): a[idx] = (''.join(random.sample(

我有一个结构化的
numpy
数组,其中一个字段有子字段:

import numpy, string, random
dtype = [('name', 'a10'), ('id', 'i4'),
         ('size', [('length', 'f8'), ('width', 'f8')])]
a = numpy.zeros(10, dtype = dtype)
for idx in range(len(a)):
    a[idx] = (''.join(random.sample(string.ascii_lowercase, 10)), idx,
              numpy.random.uniform(0, 1, size=[1, 2]))
我可以很容易地按任何字段进行排序,如下所示:

a.sort(order = ['name'])
a.sort(order = ['size'])
当我尝试按结构化字段(“本例中的大小”)对其进行排序时,它实际上是按第一个子字段(“本例中的长度”)进行排序的。但是,我希望我的元素按“高度”排序。我尝试过类似的方法,但不起作用:

a.sort(order = ['size[\'height\']']))
ValueError: unknown field name: size['height']
a.sort(order = ['size', 'height'])
ValueError: unknown field name: height

因此,我想知道是否有办法完成这项任务?

我相信这就是你想要的:

a[a["size"]["width"].argsort()]

我相信这就是你想要的:

a[a["size"]["width"].argsort()]