Bagaimana saya bisa mendapatkan nilai minimum kedua dari setiap kolom? Saya punya array ini:
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]]
Saya ingin memiliki output seperti:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Tuan Dan
sumber
sumber
Jawaban:
Coba ini, hanya dalam satu baris:
dalam aksi:
dan jika Anda memiliki nilai duplikat, misalnya:
Jika Anda perlu melewati keduanya
35
, Anda dapat menggunakanset()
:sumber
Operasi pada
numpy
array harus dilakukan dengannumpy
fungsi, jadi lihat yang ini:sumber
numpy
, saya pikirlambda
harus memperlambatheapq.nsmallest
solusi. Tampaknya terbaik untuk menjaga semuanya tetap cepatnumpy
Anda dapat menggunakan heapq.nsmallest
keluaran:
Saya menambahkan tolok ukur sederhana untuk membandingkan kinerja berbagai solusi yang sudah diposting:
Menggunakan
zip
dengansorted
fungsi adalah solusi tercepat untuk daftar 2d kecil sementara menggunakanzip
denganheapq.nsmallest
menunjukkan menjadi yang terbaik di daftar 2d besarsumber
Saya harap saya mengerti pertanyaan Anda dengan benar tetapi bagaimanapun juga inilah solusi saya, saya yakin ada cara yang lebih elegan untuk melakukan ini tetapi ia bekerja
sumber
Dengan asumsi itu
A
adalahnumpy.array
(jika ini benar, silakan pertimbangkan untuk menambahkannumpy
tag ke pertanyaan Anda) maka Anda dapat menggunakanapply_along_axis
cara berikut:Perhatikan bahwa saya menggunakan heapq.nsmallest karena melakukan penyortiran sebanyak yang diperlukan untuk mendapatkan 2 elemen terkecil, tidak seperti
sorted
yang melakukan sort lengkap.sumber
Diperbarui : Digunakan
set
untuk mencegah duplikat dan mengubah daftar menggunakanzip(*A)
old: item minimum kedua di setiap baris
sumber