Как я могу получить второе минимальное значение из каждого столбца? У меня есть этот массив:
A = [[72 76 44 62 81 31]
[54 36 82 71 40 45]
[63 59 84 36 34 51]
[58 53 59 22 77 64]
[35 77 60 76 57 44]]
Я хотел бы иметь вывод, как:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Мистер дан
источник
источник
Ответы:
Попробуйте это всего одной строкой:
в действии:
и если у вас есть повторяющееся значение, например:
Если вам нужно пропустить оба параметра
35
, вы можете использоватьset()
:источник
Операции над
numpy
массивами должны выполняться с помощьюnumpy
функций, поэтому посмотрите на это:источник
numpy
, я думаю, что решениеlambda
должно быть замедленоheapq.nsmallest
. Кажется, лучше держать все как можно быстрееnumpy
Вы можете использовать heapq.nsmallest
вывод:
Я добавил простой тест для сравнения производительности различных уже опубликованных решений:
Использование
zip
сsorted
функцией - самое быстрое решение для небольших 2-мерных списков, а использованиеzip
сheapq.nsmallest
шоу - для лучших в больших 2-мерных списках.источник
Я надеюсь, что я правильно понял ваш вопрос, но в любом случае вот мое решение, я уверен, что есть более гибкий способ сделать это, но это работает
источник
Предполагая, что
A
это такnumpy.array
(если это верно, рассмотрите возможность добавленияnumpy
тега к своему вопросу), то вы можете использоватьapply_along_axis
этот способ следующим образом:Обратите внимание, что я использовал heapq.nsmallest, так как он выполняет столько сортировки, сколько требуется для получения 2 самых маленьких элементов, в отличие от того,
sorted
который выполняет полную сортировку.источник
Обновлено : используйте
set
для предотвращения дублирования и транспонирования списка с помощьюzip(*A)
old: второй минимальный элемент в каждой строке
источник