#python #numpy
#питон #numpy #python
Вопрос:
У меня есть массив на python, подобный этому, который содержит координаты некоторых точек, для которых для каждой строки первый столбец равен x, а второй — y
[[1,2],
[1,5],
[1,3],
[2,4],
[2,3]]
Мне нужно найти точки с максимальным значением y для точек с тем же значением x. для приведенного выше массива мне требуется этот вывод
[[1,5],
[2,4]]
Обратите внимание, что я должен делать это без какого-либо цикла в python
Ответ №1:
К сожалению, Numpy не поддерживает группировку, но вы можете использовать соответствующую функцию Pandas, а затем преобразовать обратно в Numpy массив или даже обычный pythonic список:
result = pd.DataFrame(a).groupby(0).max().reset_index().values.tolist()
Я предполагаю, что a — это ваш исходный массив Numpy, созданный, например, с:
a = np.array([[1,2], [1,5], [1,3], [2,4], [2,3]])
Обратите также внимание, что другое решение содержит цикл for, встроенный в
понимание списка, но вам нужно решение без какого-либо цикла
(точно так же, как у меня).
Ответ №2:
Посмотрите, работает ли это с помощью itertools.groupby
from itertools import groupby
values = [[1,2], [1,5], [1,3], [2,4], [2,3]]
print(
[max(v) for _, v in groupby(values, key = lambda x : x[0])]
)
[[1, 5], [2, 4]]