Heim > Backend-Entwicklung > Python-Tutorial > Wie erstelle ich im Handumdrehen effizient Subarrays aus einem NumPy-Array?

Wie erstelle ich im Handumdrehen effizient Subarrays aus einem NumPy-Array?

Susan Sarandon
Freigeben: 2024-12-02 18:18:11
Original
986 Leute haben es durchsucht

How to Efficiently Create Subarrays from a NumPy Array with a Stride?

Subarrays aus Numpy Array mit Stride/Stepsize übernehmen

In diesem Zusammenhang diskutieren wir einen effizienten Ansatz in Python NumPy, um Subarrays aus einem zu erstellen gegebenes Array mit einem bestimmten Schritt.

Um dies zu erreichen, untersuchen wir zwei Methoden:

1. Broadcasting-Ansatz:

def broadcasting_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    return a[S * np.arange(nrows)[:, None] + np.arange(L)]
Nach dem Login kopieren

Bei dieser Methode wird Broadcasting verwendet, um eine Schrittmatrix zu erstellen.

2. Effizienter NumPy-Strides-Ansatz:

def strided_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows, L), strides=(S * n, n))
Nach dem Login kopieren

Diese Methode nutzt die effizienten Schritte von NumPy, um die Subarray-Matrix zu erstellen.

Beispiel:

Bedenken Sie ein Array a:

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
Nach dem Login kopieren

Um Unterarrays zu erstellen der Länge 5 mit einem Schritt von 3 können wir eine der beiden Methoden verwenden:

subarrays_broadcasting = broadcasting_app(a, L=5, S=3)
subarrays_strides = strided_app(a, L=5, S=3)
Nach dem Login kopieren

Beide Ansätze führen zu folgendem Ergebnis:

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich im Handumdrehen effizient Subarrays aus einem NumPy-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage