2013-11-07 5 views
2

Предположим, я вызываю следующие спискиPython Numpy argsort

['foo', '333', 32.3] 
['bar', 4.0] 
['baz', '555', '2232', -1.9] 

Я хочу, чтобы иметь возможность разобраться в этом с помощью последнего элемента (поплавка)

['baz', '555', '2232', -1.9] 
['bar', 4.0] 
['foo', '333', 32.3] 

В порядке возрастания

count_array = np.array([('foo', '333', 32.3),('bar', 4.0),('baz', '555', '2232', -1.9)], dtype = np.object) 

idx = np.argsort(count_array[:, 1]) 

print(count_array[idx]) 

Я хочу, чтобы иметь возможность сортировать двухмерный список, сравнивая его последний элемент. Этот код ТОЛЬКО работает, если подсписки имеют одинаковую длину.

Как я могу заставить его работать для подписок с переменной длиной?

Проблема эта линия idx = np.argsort(count_array[:, 1])

ответ

2

Я бы просто использовать простой lists здесь, когда вы создаете numpy.array с подсписками различной длиной (или различных типов данных в вашем array) вы получаете array типа object , которому не хватает многих полезных функций numpy и редко бывает хорошей идеей для реализации.

x = [['foo', '333', 32.3], 
    ['bar', 4.0], 
    ['baz', '555', '2232', -1.9]] 

result = sorted(x, key=lambda k : k[-1], reverse=True) 

Результат:

>>> result 
[['foo', '333', 32.3], ['bar', 4.0], ['baz', '555', '2232', -1.9]] 
Смежные вопросы