Jawaban:
Gunakan astype
metodenya.
>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. , 2.3],
[ 1.3, 2.9]])
>>> x.astype(int)
array([[1, 2],
[1, 2]])
np.array([np.inf]).astype(int)
, np.array([-np.inf]).astype(int)
, dan np.array([np.nan]).astype(int)
semua kembali hal yang sama. Mengapa?
nan
dan inf
merupakan nilai floating-point dan tidak dapat dikonversi secara berarti ke int. Seperti komentar sebelum catatan Anda, akan ada perilaku yang mengejutkan, dan saya tidak berpikir perilaku yang tepat didefinisikan dengan baik. Jika Anda ingin memetakan nan
dan inf
nilai-nilai tertentu, Anda perlu melakukannya sendiri.
int
. Ini numpy.int32
.
Beberapa fungsi numpy untuk bagaimana mengontrol pembulatan: etak , lantai , trunc , ceil . tergantung bagaimana Anda ingin mengitari pelampung, atas, bawah, atau ke int terdekat.
>>> x = np.array([[1.0,2.3],[1.3,2.9]])
>>> x
array([[ 1. , 2.3],
[ 1.3, 2.9]])
>>> y = np.trunc(x)
>>> y
array([[ 1., 2.],
[ 1., 2.]])
>>> z = np.ceil(x)
>>> z
array([[ 1., 3.],
[ 2., 3.]])
>>> t = np.floor(x)
>>> t
array([[ 1., 2.],
[ 1., 2.]])
>>> a = np.rint(x)
>>> a
array([[ 1., 2.],
[ 1., 3.]])
Untuk membuat salah satu dari ini ke int, atau salah satu dari tipe lain di numpy, astype (seperti dijawab oleh BrenBern):
a.astype(int)
array([[1, 2],
[1, 3]])
>>> y.astype(int)
array([[1, 2],
[1, 2]])
astype
sering terlalu umum, dan saya pikir itu mungkin lebih bermanfaat ketika melakukan konversi intx - inty. Ketika saya ingin melakukan konversi float - int dapat memilih jenis pembulatan adalah fitur yang bagus.
7.99999
ke int 8
, seperti np.rint(arr).astype(int)
?
astype(np.uint8)
Anda bisa menggunakan np.int_
:
>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. , 2.3],
[ 1.3, 2.9]])
>>> np.int_(x)
array([[1, 2],
[1, 2]])
Jika Anda tidak yakin masukan Anda akan menjadi array Numpy, Anda dapat menggunakan asarray
dengan dtype=int
bukannya astype
:
>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])
Jika array input sudah memiliki dtype yang benar, asarray
hindari salinan array sementara astype
tidak (kecuali Anda tentukan copy=False
):
>>> a = np.array([1,2,3,4])
>>> a is np.asarray(a) # no copy :)
True
>>> a is a.astype(int) # copy :(
False
>>> a is a.astype(int, copy=False) # no copy :)
True
np.inf
ataunp.nan
dalam susunan Anda, karena hasilnya mengejutkan. Misalnya,np.array([np.inf]).astype(int)
keluaranarray([-9223372036854775808])
.