Antworten:
Verwenden Sie die astype
Methode.
>>> 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)
und np.array([np.nan]).astype(int)
alle die gleiche Sache zurück. Warum?
nan
und inf
sind Gleitkommawerte und können nicht sinnvoll in int konvertiert werden. Wie der Kommentar vor Ihnen bemerkt, wird es überraschendes Verhalten geben, und ich denke nicht, dass das genaue Verhalten genau definiert ist. Wenn Sie zuordnen möchten nan
und inf
auf bestimmte Werte, müssen Sie das selbst tun.
int
. Es ist numpy.int32
.
Einige Numpy-Funktionen zur Steuerung der Rundung: Rint , Boden , Stumpf , Decke . je nachdem, wie Sie die Schwimmer abrunden möchten, nach oben, unten oder auf den nächsten int.
>>> 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.]])
Um eines davon in int oder einen der anderen Typen in numpy, astype (wie von BrenBern beantwortet) zu machen:
a.astype(int)
array([[1, 2],
[1, 3]])
>>> y.astype(int)
array([[1, 2],
[1, 2]])
astype
ist oft zu allgemein und ich denke, es ist wahrscheinlich nützlicher, wenn intx-inty-Konvertierungen durchgeführt werden. Wenn ich eine Float-Int-Konvertierung durchführen möchte, ist es eine nette Funktion, die Art der Rundung auswählen zu können.
7.99999
umzuwandeln 8
, ist np.rint(arr).astype(int)
?
astype(np.uint8)
Sie können verwenden 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]])
Wenn Sie sich nicht sicher , ob Ihre Eingabe ein Numpy Array sein werden, können Sie asarray
mit dtype=int
statt astype
:
>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])
Wenn das Eingabearray bereits den richtigen dtype hat, wird asarray
die Array-Kopie vermieden, solange astype
dies nicht der Fall ist (sofern Sie nichts anderes angeben 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
odernp.nan
in Ihrem Array haben, da sie überraschende Ergebnisse haben. Zum Beispielnp.array([np.inf]).astype(int)
Ausgängearray([-9223372036854775808])
.