Saya menggunakan Scilab, dan ingin mengubah array boolean menjadi array bilangan bulat:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
Di Scilab saya bisa menggunakan:
>>> bool2s(y)
0. 0. 1. 1.
atau bahkan kalikan saja dengan 1:
>>> 1*y
0. 0. 1. 1.
Apakah ada perintah sederhana untuk ini dengan Python, atau apakah saya harus menggunakan loop?
Jawaban:
Array numpy memiliki
astype
metode. Lakukan sajay.astype(int)
.Perhatikan bahwa bahkan mungkin tidak perlu melakukan ini, bergantung pada tujuan Anda menggunakan array. Bool akan dipromosi secara otomatis ke int dalam banyak kasus, sehingga Anda dapat menambahkannya ke array int tanpa harus mengonversinya secara eksplisit:
sumber
The
1*y
Metode bekerja di Numpy juga:Jika Anda meminta cara untuk mengonversi daftar Python dari Boolean ke int, Anda dapat menggunakannya
map
:Atau menggunakan pemahaman daftar:
sumber
y = 1 if x else 0
apakah samay = 1 if x>0 else 0
dan sama denganif x: y = 1 ""NEXT LINE"" else: y = 0
.... bagaimana Anda mempelajari trik-trik tersebut, saya tidak melihatnya di dokumentasi pernyataan if ?y=1 if x else 0
Tidak sama dengany=1 if x>0 else 0
, karena yang terakhir tidak memperhitungkan angka negatif. Inilah yang didefinisikan Python sebagaiTrue
atauFalse
, ini semua ada dalam dokumentasinya.Menggunakan numpy, Anda dapat melakukan:
Jika Anda menggunakan array non-numpy, Anda dapat menggunakan pemahaman daftar :
sumber
Seringkali Anda tidak membutuhkan konversi:
Cara yang benar untuk melakukannya adalah:
atau
sumber
Saya tahu Anda meminta solusi non-perulangan, tetapi satu-satunya solusi yang dapat saya hasilkan mungkin secara internal:
atau:
atau:
sumber
Cara yang lucu untuk melakukan ini adalah
sumber