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
Susan SarandonOriginal
2024-12-02 18:18:111112Durchsuche

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)]

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))

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])

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)

Beide Ansätze führen zu folgendem Ergebnis:

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]

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!

Stellungnahme:
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