Heim  >  Artikel  >  Backend-Entwicklung  >  Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

WBOY
WBOYnach vorne
2023-04-10 14:56:321827Durchsuche

Numpy Slicing und Indexing

Auf den Inhalt eines ndarray-Objekts kann durch Indizierung oder Slicing zugegriffen und dieser geändert werden, genau wie der Slicing-Vorgang für Listen in Python.

ndarray Arrays können basierend auf Indizes von 0 ~ n-1 indiziert werden. Das Aufteilen von Objekten kann über die integrierte Slice-Funktion und das Festlegen von Start, Stopp und erfolgen Schrittparameter. Schneiden Sie ein neues Array aus dem ursprünglichen Array aus.

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

# 🎜 🎜#

Slices können auch Ellipsen enthalten ... um die Länge des Auswahltupels an die Abmessungen des Arrays anzupassen. Wenn an der Zeilenposition Auslassungspunkte verwendet werden, wird ein ndarray zurückgegeben, das die Elemente in der Zeile enthält.

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

Erweiterter Index

Integer-Array-Index

# 🎜🎜#

Das folgende Beispiel erhält die Elemente an den Positionen

(0,0), (1,1) und (2,0) in das Array.

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

a = np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]])
print(a)
print('-' * 20)

rows = np.array([[0,0], [3,3]])
cols = np.array([[0,2], [0,2]])

b = a[rows, cols]
print(b)
print('-' * 20)

rows = np.array([[0,1], [2,3]])
cols = np.array([[0,2], [0,2]])
c = a[rows, cols]
print(c)
print('-' * 20)

rows = np.array([[0,1,2], [1,2,3], [1,2,3]])
cols = np.array([[0,1,2], [0,1,2], [0,1,2]])
d = a[rows, cols]
print(d)
rree

Das zurückgegebene Ergebnis enthält An ndarray-Objekt für jedes Eckelement.

Kann mit Hilfe von Slices mit einem Index-Array kombiniert werden: oder …. Zum Beispiel:

[[ 012]
 [ 345]
 [ 678]
 [ 9 10 11]]
--------------------
[[ 02]
 [ 9 11]]
--------------------
[[ 05]
 [ 6 11]]
--------------------
[[ 048]
 [ 37 11]
 [ 37 11]]
a = np.array([[1,2,3], [4,5,6], [7,8,9]])

print(a)
print('-' * 20)

b = a[1:3, 1:3]
print(b)
print('-' * 20)

c = a[1:3, [0,2]]
print(c)
print('-' * 20)

d = a[..., 1:]
print(d)

Boolescher Index

Wir können das Zielarray über ein boolesches Array indizieren.

Der boolesche Index verwendet boolesche Operationen (z. B. Vergleichsoperatoren), um ein Array von Elementen zu erhalten, die bestimmte Bedingungen erfüllen.

Die folgenden Beispiele erhalten Elemente größer als 5:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
--------------------
[[5 6]
 [8 9]]
--------------------
[[4 6]
 [7 9]]
--------------------
[[2 3]
 [5 6]
 [8 9]]
rrree

Das folgende Beispiel verwendet ~ (Komplementoperator), um NaN zu filtern.

a = np.array([[1,2,3], [4,5,6], [7,8,9]])

print(a)
print('-' * 20)

print(a[a > 5])
[[1 2 3]
 [4 5 6]
 [7 8 9]]
--------------------
[6 7 8 9]

Das folgende Beispiel zeigt, wie nichtplurale Elemente aus einem Array herausgefiltert werden. Nr.

Der Fancy-Index verwendet den Wert basierend auf dem Wert des Index-Arrays als Index einer Achse des Ziel-Arrays.

Wenn das Ziel ein eindimensionales Array ist, ist das Indexergebnis das Element an der entsprechenden Position ein zweidimensionales Array, dann die entsprechende Zielzeile.

Die ausgefallene Indizierung unterscheidet sich vom Slicing, sie kopiert die Daten immer in ein neues Array.

Eindimensionales Array

a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])

print(a)
print('-' * 20)

print(a[~np.isnan(a)])
rrree

zweidimensionales Array# 🎜🎜 #

1. Übergeben Sie das sequentielle Indexarray

[nan1.2. nan3.4.5.]
--------------------
[1. 2. 3. 4. 5.]
rrree

2. Übergeben Sie das Index-Array in umgekehrter Reihenfolge

a = np.array([1, 3+4j, 5, 6+7j])

print(a)
print('-' * 20)

print(a[np.iscomplex(a)])
[1.+0.j 3.+4.j 5.+0.j 6.+7.j]
--------------------
[3.+4.j 6.+7.j]

3. Übergeben Sie mehrere Index-Arrays (um np.ix_ zu verwenden)

np.ix_ Die Funktion gibt zwei Arrays ein und erzeugt eine kartesische Produktabbildungsbeziehung.

Das kartesische Produkt bezieht sich auf das kartesische Produkt (kartesisches Produkt) zweier Mengen X und Y in der Mathematik, auch als direktes Produkt bekannt, ausgedrückt als #🎜🎜 # X×Y

, das erste Objekt ist ein Mitglied von X und das zweite Objekt ist ein Mitglied aller möglichen geordneten Paare von Y.

Zum Beispiel A={a,b}, B={0,1,2}, dann:

a = np.arange(2, 10)

print(a)
print('-' * 20)

b = a[[0,6]]
print(b)
[2 3 4 5 6 7 8 9]
--------------------
[2 8]
a = np.arange(32).reshape(8, 4)

print(a)
print('-' * 20)

print(a[[4, 2, 1, 7]])
#🎜 🎜# Broadcast

Broadcast ist Numpys Methode zur Durchführung numerischer Berechnungen an Arrays unterschiedlicher Form. Arithmetische Operationen an Arrays werden normalerweise an entsprechenden Elementen durchgeführt.

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

a = np.arange(1, 5)
b = np.arange(1, 5)

c = a * b
print(c)
[ 149 16]

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:

a = np.array([
[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]
])

b = np.array([0, 1, 2])

print(a + b)
[[ 012]
 [10 11 12]
 [20 21 22]
 [30 31 32]]

下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。

Eine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden

tile扩展数组

a = np.array([1, 2])

b = np.tile(a, (6, 1))
print(b)

print('-' * 20)

c = np.tile(a, (2, 3))
print(c)
[[1 2]
 [1 2]
 [1 2]
 [1 2]
 [1 2]
 [1 2]]
--------------------
[[1 2 1 2 1 2]
 [1 2 1 2 1 2]]

4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:

a = np.array([
[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]
])

b = np.array([0, 1, 2])
bb = np.tile(b, (4, 1))

print(a + bb)
[[ 012]
 [10 11 12]
 [20 21 22]
 [30 31 32]]

广播的规则:

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 维补齐。
  • 输出数组的形状是输入数组形状的各个维度上的最大值。
  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

Das obige ist der detaillierte Inhalt vonEine ausführliche Erläuterung des Python-Datenanalysemoduls Numpy zum Schneiden, Indizieren und Senden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen