Удалите все строки в массиве python nume, которые не соответствуют верхним n значениям столбца - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующий массив с 2 столбцами. Я хотел бы определить 3 верхних максимальных значения во втором столбце и удалить все строки, которые не содержат значения в верхних 3.

array([[0, 3],
       [1, 4],
       [2, 5],
       [3, 5],
       [4, 2]])

выход:

array([[2, 5],
       [3, 5],
       [1, 4]])

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Хотя я согласен с Анагносту Джоном, я предлагаю изменить его следующим образом:

a  = np.array([[0, 3],
               [1, 4],
               [2, 5],
               [3, 5],
               [4, 2]])

f = sorted(a, key=lambda x: -x[1])
print(f[:3])

Потому что это можно использовать и для больших массивов.

0 голосов
/ 01 ноября 2018

Я думаю, что этот код может вам помочь

x  = ([[0, 3],[1, 4],[2, 5],[3, 5],[4, 2]])

f = sorted(x, key=lambda x: x[1])
print(f[2:])

С по этой ссылке

0 голосов
/ 01 ноября 2018

Поскольку сортировку нужно выполнять только по второму столбцу, вы можете использовать pandas. Это делает вещи немного проще:

import pandas

In [725]: x
Out[725]: 
array([[0, 3],
       [1, 4],
       [2, 5],
       [3, 5],
       [2, 4]])

In [724]: pd.DataFrame(x).sort_values(1, ascending=False).head(3).values.tolist()
Out[724]: [[2, 5], [3, 5], [1, 4]]
0 голосов
/ 01 ноября 2018

Вы можете использовать nugy argsort и взять последние 3 строки

array_name[np.argsort(array_name, axis = 0)[:,1]][-3:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...