Odpowiedzi:
Skorzystaj z astype
metody
>>> 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)
i np.array([np.nan]).astype(int)
wszystko powróci samo. Dlaczego?
nan
i inf
są wartościami zmiennoprzecinkowymi i nie można ich znacząco przekonwertować na int. Jak zauważa komentarz przed twoimi, będzie zaskakujące zachowanie i nie sądzę, że dokładne zachowanie jest dobrze zdefiniowane. Jeśli chcesz zmapować nan
i inf
pewne wartości, musisz to zrobić sam.
int
. Jest numpy.int32
.
Niektóre funkcje numpy do sterowania zaokrąglaniem: rint , floor , trunc , ceil . w zależności od tego, jak chcesz zaokrąglić liczbę zmiennoprzecinkową, w górę, w dół lub do najbliższej liczby całkowitej.
>>> 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.]])
Aby uczynić jedną z nich int, lub jednym z innych typów w numpy, astype (zgodnie z odpowiedzią BrenBern):
a.astype(int)
array([[1, 2],
[1, 3]])
>>> y.astype(int)
array([[1, 2],
[1, 2]])
astype
jest często zbyt ogólna i myślę, że prawdopodobnie jest bardziej przydatna podczas konwersji typu intx. Kiedy chcę wykonać konwersję float - int, możliwość wyboru rodzaju zaokrąglania jest miłą cechą.
7.99999
ints like 8
, jest np.rint(arr).astype(int)
?
astype(np.uint8)
możesz użyć 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]])
Jeśli nie jesteś pewien, Twój wkład będzie tablicę NumPy, można skorzystać asarray
ze dtype=int
zamiast astype
:
>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])
Jeśli tablica wejściowa ma już prawidłowy typ, asarray
unika kopiowania tablicy, dopóki jej astype
nie ma (chyba że określono 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
aninp.nan
w swojej tablicy, ponieważ mają zaskakujące wyniki. Na przykładnp.array([np.inf]).astype(int)
wyjściaarray([-9223372036854775808])
.