Misalnya saya punya array x

x = [10, 100, 1000, 10000] 

Jika saya memiliki angka 600, lalu bagaimana saya bisa mendapatkan nilai 100 sebagai nilai bawah dan 1000 sebagai nilai atas.

0
UnlimitedQuestions 16 Agustus 2017, 18:39

2 jawaban

Jawaban Terbaik

Dengan asumsi input telah diurutkan, kita dapat menggunakan np.searchsorted untuk mendapatkan indeks di mana 600 dapat ditempatkan dalam urutan yang diurutkan itu dan kemudian cukup gunakan indeks dan indeks yang digeser satu kali untuk mendapatkan batas bawah dan atas pada pengindeksan, seperti -

idx = np.searchsorted(x,600)
out = x[idx-1], x[idx]

Contoh lari -

In [41]: x = [10, 100, 1000, 10000]

In [42]: idx = np.searchsorted(x,600)

In [44]: x[idx-1], x[idx]
Out[44]: (100, 1000)

Kami juga dapat menggunakan bisect modul, yang menurut saya bisa sedikit lebih cepat -

import bisect

idx = bisect.bisect_left(x,600)
3
Divakar 16 Agustus 2017, 15:49

Ulangi daftar; periksa untuk melihat apakah angka saat ini lebih besar dari nilai tes; jika pilih nilai ini dan nilai sebelumnya.
enumerate() mungkin membuat ini lebih mudah.

Asumsikan daftar yang diurutkan.

0
wwii 16 Agustus 2017, 16:43