Heim >Backend-Entwicklung >Python-Tutorial >Detailliertes Verständnis des prägnanten NumPy-Tutorials --- Array 3 (Kombination)
Die ersten beiden Artikel gaben eine grundlegende Einführung in NumPy-Arrays. Dieser Artikel bietet eine ausführlichere Diskussion über NumPy-Arrays. Zuerst stellen wir Arrays benutzerdefinierter Typen vor, dann die Kombination von Arrays und schließlich stellen wir die Probleme des Array-Kopierens vor.
Benutzerdefiniertes Strukturarray
Strukturtypen wie die C-Sprache können auch über NumPy definiert werden. Die Methode zum Definieren einer Struktur in NumPy ist wie folgt:
Definieren Sie den Strukturtypnamen; definieren Sie den Feldnamen und geben Sie den Felddatentyp an.
student= dtype({'names':['name', 'age', 'weight'], 'formats':['S32', 'i','f']}, align = True)
Hier ist student der Name des benutzerdefinierten Strukturtyps, der mit der dtype-Funktion erstellt wurde, im ersten Parameter „names“ und „Formate“ können nicht geändert werden. „Names“ listet die Feldnamen in der Struktur auf, und „Formate“ listet die Datentypen der entsprechenden Felder auf. S32 stellt eine Zeichenfolge mit einer Länge von 32 Byte dar, i stellt eine 32-Bit-Ganzzahl dar und f stellt eine 32-Bit-Gleitkommazahl dar. Wenn der letzte Parameter „True“ ist, bedeutet dies, dass eine Speicherausrichtung erforderlich ist.
Die Zeichenkodierung von NumPy wird im Feld verwendet, um den Datentyp darzustellen. Ausführlichere Datentypen finden Sie in der folgenden Tabelle.
数据类型 | 字符编码 |
整数 | i |
无符号整数 | u |
单精度浮点数 | f |
双精度浮点数 | d |
布尔值 | b |
复数 | D |
字符串 | S |
Unicode | U |
Void | V |
Nachdem Sie den Strukturtyp definiert haben, können Sie ein Array mit diesem Typ als seinen Elementen definieren:
a= array([(“Zhang”, 32, 65.5), (“Wang”, 24, 55.2)], dtype =student)
Zusätzlich zur Auflistung der Daten der entsprechenden Felder in jedem Element müssen Sie im letzten Parameter der Array-Funktion auch den entsprechenden Datentyp angeben.
Funktionen kombinieren
Hier sind die verschiedenen Möglichkeiten, Funktionen zu kombinieren. Erstellen Sie zunächst zwei Arrays:
>>> a = arange(9).reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> b = 2 * a >>> b array([[ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
Horizontale Kombination
>>> hstack((a, b)) array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
Dieser Effekt kann auch durch die Verkettungsfunktion und Angabe der entsprechenden Achse erzielt werden:
>>> concatenate((a, b), axis=1) array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
Vertikale Kombination
>>> vstack((a, b)) array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
In ähnlicher Weise kann dies durch die Verkettungsfunktion und die Angabe des entsprechenden Achseneffekts erreicht werden.
>>> concatenate((a, b), axis=0) array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
Tiefenkombination
Darüber hinaus gibt es Tiefenkombinationsfunktionen dstack . Wie der Name schon sagt, wird es auf der dritten Achse des Arrays (d. h. der Tiefe) kombiniert. Wie folgt:
>>> dstack((a, b)) array([[[ 0, 0], [ 1, 2], [ 2, 4]], [[ 3, 6], [ 4, 8], [ 5, 10]], [[ 6, 12], [ 7, 14], [ 8, 16]]])
Schauen Sie genau hin und stellen Sie fest, dass die entsprechenden Elemente in einer neuen Liste zusammengefasst sind, die als Element von verwendet wird neues Array.
Zeilenkombination
Zeilenkombination kombiniert mehrere eindimensionale Arrays als jede Zeile eines neuen Arrays:
>>> one = arange(2) >>> one array([0, 1]) >>> two = one + 2 >>> two array([2, 3]) >>> row_stack((one, two)) array([[0, 1], [2, 3]])
Bei 2D-Arrays funktioniert dies wie eine vertikale Kombination.
Spaltenkombination
Der Effekt der Spaltenkombination sollte klar sein. Wie folgt:
>>> column_stack((oned, twiceoned)) array([[0, 2], [1, 3]])
Bei zweidimensionalen Arrays funktioniert es wie eine horizontale Kombination.
Array teilen
In NumPy umfassen die Funktionen zum Teilen von Arrays hsplit, vsplit, dsplit und split. Sie können das Array in Unterarrays gleicher Größe aufteilen oder den Ort angeben, an dem das ursprüngliche Array aufgeteilt wird.
Horizontal teilen
>>> a = arange(9).reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> hsplit(a, 3) [array([[0], [3], [6]]), array([[1], [4], [7]]), array([[2], [5], [8]])]
Rufen Sie auch die Teilungsfunktion auf und geben Sie die Achse als 1 bis an Erhalten Sie diesen Effekt:
split(a, 3, axis=1)
Vertikale Aufteilung
Die vertikale Aufteilung erfolgt entlang die vertikale Achse schneidet die Gruppe:
>>> vsplit(a, 3) >>> [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
In ähnlicher Weise können Sie auch die Solit-Funktion verwenden und die Achse als 1 angeben, um eine solche zu erhalten ein Effekt:
>>> split(a, 3, axis=0)
Tiefenorientierte Segmentierung
Die dsplit-Funktion verwendet Tiefenorientierte Segmentierungsmethode:
>>> c = arange(27).reshape(3, 3, 3) >>> c array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]) >>> dsplit(c, 3) [array([[[ 0], [ 3], [ 6]], [[ 9], [12], [15]], [[18], [21], [24]]]), array([[[ 1], [ 4], [ 7]], [[10], [13], [16]], [[19], [22], [25]]]), array([[[ 2], [ 5], [ 8]], [[11], [14], [17]], [[20], [23], [26]]])]
Kopieren und Spiegeln (Ansicht)
Beim Berechnen der Summe Beim Arbeiten mit Arrays werden deren Daten manchmal in das neue Array kopiert und manchmal nicht. Dies führt bei Neulingen oft zu Verwirrung. Hierfür gibt es drei Fälle:
Überhaupt kein Kopieren
Einfache Zuweisung ohne Kopieren der Array-Objekte oder deren Daten.
>>> a = arange(12) >>> b = a #不创建新对象 >>> b is a # a和b是同一个数组对象的两个名字 True >>> b.shape = 3,4 #也改变了a的形状 >>> a.shape (3, 4) Python 传递不定对象作为参考4,所以函数调用不拷贝数组。 >>> def f(x): ... print id(x) ... >>> id(a) #id是一个对象的唯一标识 148293216 >>> f(a) 148293216
Ansicht und flaches Kopieren
verschiedene Array-Objekte teilen dieselben Daten . Die Ansichtsmethode erstellt ein neues Array-Objekt, das auf dieselben Daten zeigt.
>>> c = a.view() >>> c is a False >>> c.base is a #c是a持有数据的镜像 True >>> c.flags.owndata False >>> >>> c.shape = 2,6 # a的形状没变 >>> a.shape (3, 4) >>> c[0,4] = 1234 #a的数据改变了 >>> a array([[ 0, 1, 2, 3], [1234, 5, 6, 7], [ 8, 9, 10, 11]])
Ein geschnittenes Array gibt eine Ansicht davon zurück:
>>> s = a[ : , 1:3] # 获得每一行1,2处的元素 >>> s[:] = 10 # s[:] 是s的镜像。注意区别s=10 and s[:]=10 >>> a array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]])
Deep Copy
Diese Kopiermethode kopiert das Array und seine Daten vollständig.
>>> d = a.copy() #创建了一个含有新数据的新数组对象 >>> d is a False >>> d.base is a #d和a现在没有任何关系 False >>> d[0,0] = 9999 >>> a array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]])
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich sein wird wird die chinesische PHP-Website unterstützen.
Für ein tieferes Verständnis des prägnanten Tutorials von NumPy – Artikel zum Thema Array 3 (Kombination) beachten Sie bitte die chinesische PHP-Website!