2012-06-03 58 views

Trả lời

244

Sử dụng phương pháp astype.

>>> 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]]) 
+19

Chỉ cần chắc chắn rằng bạn không có 'np. inf'or 'np.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)' kết quả đầu ra 'mảng ([- 9223372036854775808])'. – Garrett

50

Một số chức năng NumPy cho làm thế nào để kiểm soát việc làm tròn: rint, floor, trunc, ceil. tùy thuộc vào cách u muốn làm tròn các phao, lên, xuống, hoặc đến 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.]]) 

Để làm cho một trong những này trong sang int, hoặc một trong các loại khác trong NumPy, astype (như trả lời bằng cách BrenBern):

a.astype(int) 
array([[1, 2], 
     [1, 3]]) 

>>> y.astype(int) 
array([[1, 2], 
     [1, 2]]) 
+1

Chính xác những gì tôi đang tìm kiếm. 'astype' thường quá chung chung và tôi nghĩ nó có thể hữu ích hơn khi thực hiện chuyển đổi intx - inty. Khi tôi muốn làm float-int chuyển đổi có thể chọn loại làm tròn là một tính năng tốt đẹp. – Bakuriu

+6

Vì vậy, cách đơn giản nhất để chuyển đổi một cách an toàn gần như-int như '7.99999' thành ints như' 8', là 'np.rint (arr) .astype (int)'? – endolith

+0

bất kỳ cách nào để gọn gàng để làm cho nó uint8? – Ryan

6

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]]) 
5

Nếu bạn không chắc chắn đầu vào của mình sẽ là 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 đúng, asarray tránh 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 
Các vấn đề liên quan