2016-01-29 2 views
0

У меня есть структурированный 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']) 

Когда я пытаюсь сортировать его по структурированному полю («размер» в этом примере), он эффективно сортируется по первому подполе («длина» в этом примере). Тем не менее, я хотел бы, чтобы мои элементы отсортировались по «высоте». Я пытался что-то вроде этого, но он не работает:

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

Поэтому мне интересно, если есть способ, чтобы выполнить задачу?

ответ

2

Я считаю, что это то, что вы хотите:

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