Câu trả lời:
Sử dụng astype
phương pháp.
>>> 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)
, và np.array([np.nan]).astype(int)
tất cả trở lại điều tương tự. Tại sao?
nan
và inf
là các giá trị dấu phẩy động và không thể được chuyển đổi thành int. Như nhận xét trước ghi chú của bạn, sẽ có hành vi đáng ngạc nhiên và tôi không nghĩ hành vi chính xác được xác định rõ. Nếu bạn muốn lập bản đồ nan
và inf
các giá trị nhất định, bạn cần phải tự làm điều đó.
int
. Đó là numpy.int32
.
Một số chức năng numpy cho cách kiểm soát làm tròn: rint , sàn , trunc , trần . tùy thuộc vào cách bạn muốn làm tròn số phao, lên, xuống hoặc đến int gần nhất.
>>> 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.]])
Để thực hiện một trong những điều này thành int hoặc một trong các loại khác trong numpy, astype (như được trả lời bởi BrenBern):
a.astype(int)
array([[1, 2],
[1, 3]])
>>> y.astype(int)
array([[1, 2],
[1, 2]])
astype
thường quá chung chung và tôi nghĩ có lẽ hữu ích hơn khi thực hiện chuyển đổi intx - inty. Khi tôi muốn thực hiện float - chuyển đổi int có thể chọn loại làm tròn là một tính năng hay.
7.99999
thành int như thế nào 8
, là np.rint(arr).astype(int)
?
astype(np.uint8)
bạn có thể sử dụng 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]])
Nếu bạn không chắc chắn đầu vào của bạn sẽ là một mảng NumPy, bạn có thể sử dụng asarray
với dtype=int
thay vì astype
:
>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])
Nếu mảng đầu vào đã có dtype chính xác, asarray
sẽ tránh việc sao chép mảng trong khi astype
không (trừ khi bạn chỉ định 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
hoặcnp.nan
trong mảng của bạn, vì chúng có kết quả đáng ngạc nhiên. Ví dụ,np.array([np.inf]).astype(int)
đầu raarray([-9223372036854775808])
.