2017-04-09 3 views
1

Ist es möglich, numpy.split zu verwenden, um ein numpy.darray mit überlappenden Teilen zu teilen.Numpy.split mit überlappenden Matrizen?

Beispiel:

ein numpy.ndarray der Form (3,3) und ich möchte Da es in ndarray aufzuspalten, der Form (1,1), die durch

numpy.split((3,3),(1,1)) = [(1,1),(1,1),(1,1)] 

Aber was, wenn Ich wollte numpy.darrays der Form (3,2), wäre es in der Lage, eine Liste mit der Länge 2 mit überlappenden numpy.narrays zu generieren?

als solche:

enter image description here

+0

Können Sie angeben, wie die Ausgabe aussehen soll, wenn eine Eingabe wie 'np.arange (9) .reshape ((3, 3))' '? (auch: warum willst du das?) Mein erster Gedanke wäre 'np.lib.index_tricks.as_strided ' – mdurant

+0

@mdurant Ich fügte ein Beispiel mit Bild hinzu. Ich verwende Überlappung als einen Weg, um einen fließenden Übergang zwischen der ersten Menge und der zweiten Menge zu erzeugen. Ps. Ich korrigierte auch die gewünschte Form von (2,2) zu (3,2) ... Könnte Verwirrung verursacht haben. –

+0

Ich habe meinen eigenen Beitrag markiert. gefundene Lösung woanders. –

Antwort

1

Ich bin nicht ganz sicher, was Sie sehen wollen, aber dies könnte Ihre Frage beantworten:

Mit Eingang:

> arr = np.arange(9, dtype='int64').reshape((3, 3)) 

array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]) 


> np.lib.index_tricks.as_strided(arr, (2, 2, 2, 2), (24, 8, 24, 8), True) 

array([[[[0, 1], 
     [3, 4]], 
     [[1, 2], 
     [4, 5]]], 
     [[[3, 4], 
     [6, 7]], 
     [[4, 5], 
     [7, 8]]]]) 

Interessanterweise hier liegen keine Kopien der Daten vor. Beachten Sie, dass die Werte für as_strided nur für 8-Byte-Werte und einen 3x3-Eingang korrekt sind. Sie können sie aus den vorhandenen Form/Schritten der Eingabe erhalten.

+0

könnten Sie etwas über den Parameter, den Sie in der Funktion eingegeben haben, ausarbeiten? –

+0

Um richtig zu parametrieren, könnten Bits von diesem Pfosten abgeholt werden: http://stackoverflow.com/a/16788733/3293881 – Divakar

Verwandte Themen