按子字段排序Numpy数组

时间:2016-01-29 09:51:24

标签: 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(string.ascii_lowercase, 10)), idx,
              numpy.random.uniform(0, 1, size=[1, 2]))

我可以轻松地按任何字段对其进行排序,例如:

a.sort(order = ['name'])
a.sort(order = ['size'])

当我尝试按结构化字段(在此示例中为“size”)对其进行排序时,它实际上是按第一个子字段(在此示例中为“length”)进行排序。但是,我希望我的元素按'高度'排序。我试过这样的东西,但它不起作用:

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

因此,我想知道,如果有办法完成任务吗?

1 个答案:

答案 0 :(得分:2)

我相信这就是你想要的:

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