English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
NumPy-Datenartenbeschreibung und Beispiel
Datenart, auch dtype, ist ebenfalls ein spezieller Objekt, der die Informationen über den Speicherblock angibt, den ndarray für eine bestimmte Datentypeninformation benötigt (auch Metadaten, d.h. Daten über Daten). dtype ist der Grund, warum NumPy mit anderen Systemen flexibel interagieren kann. In der Regel stellen andere Systeme eine Beziehung zwischen Festplatte oder Speicher und Daten her, was das Lesen und Schreiben von Daten mit tiefen Sprachen wie C oder Fortran erheblich vereinfacht.
Die unterstützten Datentypen von numpy sind mehr als Eingebauter Datentyp von PythonEs gibt viele mehr, sie können im Allgemeinen mit den Datentypen der Sprache C korrespondieren, wobei einige Typen auf die eingebauten Typen von Python korrespondieren. Die nachstehende Tabelle listet die häufigen NumPy-Basistypen auf.
Name | Beschreibung |
int_ | Standard-Ganze Zahlentypen (ähnlich wie C's long, int32 oder int64) |
int8 | Bytes (-128 bis 127) |
int16 | Ganze Zahlentypen (-32768 bis 32767) |
int32 | Ganze Zahlentypen (-2147483648 bis 2147483647) |
int64 | Ganze Zahlentypen (-9223372036854775808 bis 9223372036854775807) |
intc | Der gleiche wie der Typ int in C, im Allgemeinen ist es int32 oder int 64 |
intp | Ganze Zahlentypen zum Indexieren (ähnlich wie C's ssize_t, im Allgemeinen ist es int32 oder int64) |
uint8 | Unsignierte Ganzzahlen (von 0 bis 255) |
uint16 | Unsignierte Ganzzahlen (von 0 bis 65535) |
uint32 | Unsignierte Ganzzahlen (von 0 bis 4294967295) |
uint64 | Unsignierte Ganzzahlen (von 0 bis 18446744073709551615) |
float_ | float64 Kurzform des Typs |
float16 | Half-Precision-Fließkommazahlen, einschließlich:1 Stellen des Vorzeichens5 Stellen des Exponenten10 Stellen der Nachkommazahl |
float32 | Single-Precision-Fließkommazahlen, einschließlich:1 Stellen des Vorzeichens8 Stellen des Exponenten23 Stellen der Nachkommazahl |
float64 | Double-Precision-Fließkommazahlen, einschließlich:1 Stellen des Vorzeichens11 Stellen des Exponenten52 Stellen der Nachkommazahl |
complex_ | complex128 Kurzform des Typs, d.h. 128 Bit-komplexe |
complex64 | Komplexe, die dargestellt werden durch 32 Bit-float (Rechteil und Imaginärteil) |
complex128 | Komplexe, die dargestellt werden durch 64 Bit-float (Rechteil und Imaginärteil) |
bool_ | Boolescher Datentyp (True oder False) |
Man muss sich diese NumPy-dtype nicht unbedingt merken, besonders nicht für Anfänger. Normalerweise reicht es aus, zu wissen, dass der Typ der Daten, mit denen man arbeitet, grob gesagt eine Fließkommazahl, ein Komplexes, eine Ganzzahl, ein Boolescher Wert, ein String oder ein reguläres Python-Objekt ist. Wenn man die Speicher- und Speicherplatzverwaltung der Daten steuern muss (insbesondere für große Datensätze), dann muss man wissen, wie man die Speichertypen steuert.
Die numerischen Typen von numpy sind tatsächlich Instanzen von dtype-Objekten und entsprechen einzigartigen Zeichen, einschließlich np.bool_, np.int32np.float32etc.
Der Datentyp-Objekt beschreibt, wie der Speicherbereich der Arrays verwendet wird, was von folgenden Aspekten abhängt:
Der Datentyp der Daten - Zum Beispiel, Fließkommazahlen, Komplexe, Ganzzahlen, Boolesche Werte, Strings oder Python-Objekte.Die Größe der Daten - Zum Beispiel, wie viele Bytes ein Integer speichert.Die Byte-Reihenfolge der Daten - Little-Endian oder Big-Endian
Die Byte-Reihenfolge wird durch das Vorherbestimmen des Datentyps mit "<" oder ">" bestimmt. "<" bedeutet Little-Endian (der kleinste Wert wird im kleinsten Adressraum gespeichert, d.h. die niedrigsten Bytes stehen vorne). ">" bedeutet Big-Endian (die wichtigsten Bytes werden im kleinsten Adressraum gespeichert, d.h. die höchsten Bytes stehen vorne).
Der dtype-Objekt wird mit folgender Syntax erstellt:
numpy.dtype(object, align, copy)
object - Das zu konvertierende Datenobjektalign - Wenn true, füllen Sie die Felder aus, so dass sie ähnlich wie C-Strukturen sind.copy - Kopieren des dtype-Objekts, wenn false, ist eine Referenz auf ein internes Datentypenobjekt
Nun können wir durch Beispiele verstehen.
>>> import numpy as np >>> a = np.dtype(np.float32) >>> print(a) float32
# int8, int16, int32, int64 Vier Datentypen können mit dem String 'i1','i2','i4','i8'' ersetzt >>> import numpy as np >>> a = np.dtype('i8')) >>> print(a) int64
Dieses Beispiel zeigt die Verwendung von strukturierten Datentypen, wobei die Typenfelder und die zugehörigen tatsächlichen Typen erstellt werden.
>>> import numpy as np >>> a = np.dtype([('number', np.int16)) # Der Datentyp wird auf den ndarray-Objekt angewendet >>> print(a) [('number', '<i2']) >>> arr = np.array(1,)2,)3((( >>> print(arr) ,)1,)2,)3>>> print(arr['number']) # Der Typenfeldname kann verwendet werden, um die tatsächliche number-Spalte abzurufen Die folgenden Beispiele definieren einen strukturierten Datentyp animal, der die Zeichenfelder name, das Ganzzahlfeld age und das Fließkommafeld marks enthält und diesen dtype auf den ndarray-Objekt anwendet. [1 2 3]
>>> animal = np.dtype([('name','S
>>> import numpy as np 21'), ('marks', '4')]) >>> print(animal) 21'), ('marks', ' <f4']) >>> a = np.array([('cat', 5, 10)), ('dog', 4, 35)), ('lion',8,18]), dtype = animal) >>> print(a) [(b'cat', 5, 10). (b'dog', 4, 35). (b'lion', 8, 18).]
Die Methode astype kann den Datentyp eines Arrays explizit umwandeln. Ein Beispiel ist wie folgt:
>>> import numpy as np >>> arr = np.array([1,2,3,4,5]) >>> print(arr.dtype) int64 >>> print(arr) [1 2 3 4 5] >>> float_arr = arr.astype('float'32') # auch als arr.astype(np.float)32) >>> print(float_arr.dtype) float32 >>> print(float_arr) [1. 2. 3. 4. 5.]
还可以用其他数组的 dtype 来转换数据类型,具体实例如下:
>>> import numpy as np >>> int_arr = np.arange(10) >>> calibers = np.array([.22, .270, .357], dtype=np.float64) >>> print(calibers) [0.22 0.27 0.357] >>> arr_last = int_arr.astype(calibers.dtype) >>> print(arr_last.dtype) float64 >>> print(arr_last) [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
每个内建类型都有一个唯一定义它的字符代码,如下:
字符 | 对应类型 |
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-) 字符串 |
U | Unicode |
V | 原始数据 (void) |