Heim > Backend-Entwicklung > Python-Tutorial > Detailliertes Verständnis des prägnanten NumPy-Tutorials --- Array 3 (Kombination)

Detailliertes Verständnis des prägnanten NumPy-Tutorials --- Array 3 (Kombination)

高洛峰
Freigeben: 2017-02-23 16:55:18
Original
1300 Leute haben es durchsucht

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)
Nach dem Login kopieren

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
UnicodeU
VoidV

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)
Nach dem Login kopieren

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]])
Nach dem Login kopieren

Horizontale Kombination

>>> hstack((a, b)) 
array([[ 0, 1, 2, 0, 2, 4], 
  [ 3, 4, 5, 6, 8, 10], 
  [ 6, 7, 8, 12, 14, 16]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

Vertikale Kombination

>>> vstack((a, b)) 
array([[ 0, 1, 2], 
  [ 3, 4, 5], 
  [ 6, 7, 8], 
  [ 0, 2, 4], 
  [ 6, 8, 10], 
  [12, 14, 16]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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]]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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]])]
Nach dem Login kopieren

Rufen Sie auch die Teilungsfunktion auf und geben Sie die Achse als 1 bis an Erhalten Sie diesen Effekt:

split(a, 3, axis=1)
Nach dem Login kopieren

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]])]
Nach dem Login kopieren

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)
Nach dem Login kopieren

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]]])]
Nach dem Login kopieren

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
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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]])
Nach dem Login kopieren

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!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage