Konvertieren Sie ein 2D-Float-Array in ein 2D-Int-Array in NumPy

Lesezeit: 3 Minuten

Benutzer-Avatar
Shan

Wie konvertiere ich ein Float-NumPy-Array in ein Int-NumPy-Array?

Benutzer-Avatar
BrenBarn

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

  • Stellen Sie nur sicher, dass Sie es nicht haben np.infoder np.nan in Ihrem Array, da sie überraschende Ergebnisse haben. Zum Beispiel, np.array([np.inf]).astype(int) Ausgänge array([-9223372036854775808]).

    – Garrett

    22. Januar 2015 um 8:42 Uhr

  • Auf meiner Maschine np.array([np.inf]).astype(int), np.array([-np.inf]).astype(int)und np.array([np.nan]).astype(int) alle geben dasselbe zurück. Wieso den?

    – BallpointBen

    14. Mai 2018 um 20:47 Uhr

  • @BallpointBen: nan und inf sind Fließkommawerte und können nicht sinnvoll in int konvertiert werden. Wie der Kommentar vor Ihnen feststellt, wird es ein überraschendes Verhalten geben, und ich glaube nicht, dass das genaue Verhalten gut definiert ist. Wenn Sie kartieren möchten nan und inf zu bestimmten Werten müssen Sie das selbst tun.

    – BrenBarn

    15. Mai 2018 um 18:21 Uhr

  • Beachten Sie, dass x.astype(int)[0][0] ist nicht typ int. Es ist numpy.int32.

    – Chris

    6. Juni 2018 um 19:34 Uhr

  • Beachten Sie, dass dies zwar das Array in Ints umwandelt, die Antwort von @fhtuft jedoch zu weniger Überraschungen führen kann

    – Nathan Musoke

    15. April 2020 um 18:07 Uhr

Benutzer-Avatar
fhtuft

Einige numpy-Funktionen zur Steuerung der Rundung: druck, Boden,abschneiden, Decke. Je nachdem, wie Sie die Floats runden 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 einen davon in int oder einen der anderen Typen in numpy zu machen, astyp (wie von BrenBern beantwortet):

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

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

  • Genau das, wonach ich gesucht habe. astype ist oft zu generisch, und ich denke, es ist wahrscheinlich nützlicher, wenn Sie intx – inty-Konvertierungen durchführen. Wenn ich eine Float – Int-Konvertierung durchführen möchte, ist es eine nette Funktion, die Art der Rundung auswählen zu können.

    – Bakuriu

    11. September 2012 um 7:03 Uhr

  • Also der einfachste Weg, fast-ints wie sicher zu konvertieren 7.99999 zu ints wie 8ist np.rint(arr).astype(int)?

    – Endolith

    12. Oktober 2012 um 18:53 Uhr

  • irgendwie in numpy, um es uint8 zu machen?

    – Ryan

    6. Februar 2018 um 12:47 Uhr

  • @ Ryan astype(np.uint8)

    – Chris

    6. Juni 2018 um 19:28 Uhr

  • Können Sie auch etwas zur Laufzeit dieser Methoden sagen?

    – Divyanshu Srivastava

    26. März um 21:59 Uhr


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 nicht sicher sind, ob Ihre Eingabe ein Numpy-Array sein wird, können Sie verwenden asarray mit dtype=int Anstatt von astype:

>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])

Wenn das Eingabearray bereits den richtigen dtype hat, asarray vermeidet die Array-Kopie while astype nicht (es sei denn, Sie geben an 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

1094320cookie-checkKonvertieren Sie ein 2D-Float-Array in ein 2D-Int-Array in NumPy

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy