2014-03-26 9 views
13

Ich verstehe nicht genau, wie der Reflect-Modus meine Arrays behandelt. Ich habe diese sehr einfache Array:Wie genau funktioniert der "reflect" -Modus für scipys ndimage filters?

import numpy as np 
from scipy.ndimage.filters import uniform_filter 
from scipy.ndimage.filters import median_filter 

vector = np.array([[1.0,1.0,1.0,1.0,1.0],[2.0,2.0,2.0,2.0,2.0],[4.0,4.0,4.0,4.0,4.0],[5.0,5.0,5.0,5.0,5.0]]) 

print(vector) 

[[1. 1. 1. 1. 1.] [2. 2. 2. 2. 2.] [4. 4. 4. 4. 4.] [5. 5. 5. 5. 5.]]

eine einheitliche Anwendung (Mittelwert) -Filter mit einer Fenstergröße von 3 ich folgendes:

filtered = uniform_filter(vector, 3, mode='reflect') 

print(filtered) 

[[1,33333333 1,33333333 1.33333333 1.33333333 1.33333333] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.66666667 3.66666667 3.66666667 3.66666667] [4,66666667 4,66666667 4,66666667 4,66666667 4,66666667]]

Wenn ich versuche, die Übung mit der Hand zu replizieren ich zu diesem Ergebnis bekommen. Original-Matrix in Grün, Fenster in Orange und Ergebnis in Gelb. Weiß sind "reflektierte" Beobachtungen.

enter image description here

Ergebnis ist:

enter image description here

Aber wenn ich eine Fenstergröße von Versuch 4 oder 5 Ich kann nicht die Ergebnisse replizieren können.

filtered = uniform_filter(vector, 4, mode='reflect') 

print(filtered) 

[[1,5 1,5 1,5 1,5 1,5] [2. 2. 2. 2. 2.] [3. 3. 3. 3. 3.] [4. 4. 4. 4 . 4.]]

es von Hand tun:

enter image description here

Und ich bekomme:

enter image description here

Wie wird das Fenster gehandhabt, wenn seine Größe gerade ist? Aber wie auch immer, wenn ich versuche, die Ergebnisse eines Fensters der Größe 5 und des Modus widerzuspiegeln, kann ich auch nicht. Obwohl ich denke, dass das Verhalten analog zu dem der Größe 3 ist.

+1

In der Abbildung unten "Doing it hand:" haben Sie die obere Zeile Ihres erweiterten Arrays nicht korrekt ausgefüllt. Sie haben einfach den Wert "1" vertikal kopiert. Bei 'mode = 'reflect' sollten in der obersten Zeile über dem Hauptfeld (hellgelb) 2 Zeichen stehen. –

+0

genau das möchte ich wissen, kannst du mir helfen, genau zu verstehen, wie der Modus funktioniert? für Fenstergröße n = 2,3, ..., etc?Ich würde akzeptieren, dass ich als Antwort darauf besonders interessiert bin, wie die Fenster funktionieren, wenn die Dimension eine gerade Zahl ist. – JEquihua

Antwort

33

Angenommen, die Daten in einer Achse sind 1 2 3 4 5 6 7 8. Die folgende Tabelle zeigt, wie die Daten für jeden Modus erweitert wird (unter der Annahme cval=0):

mode  | Ext |   Input   | Ext 
    -----------+---------+------------------------+--------- 
    'mirror' | 4 3 2 | 1 2 3 4 5 6 7 8 | 7 6 5 
    'reflect' | 3 2 1 | 1 2 3 4 5 6 7 8 | 8 7 6 
    'nearest' | 1 1 1 | 1 2 3 4 5 6 7 8 | 8 8 8 
    'constant' | 0 0 0 | 1 2 3 4 5 6 7 8 | 0 0 0 
    'wrap'  | 6 7 8 | 1 2 3 4 5 6 7 8 | 1 2 3 

Für eine noch Fenstergröße n, sollten Sie die Fenster der Größe n+1, und dann schließen nicht die unteren und rechten Rand. (Die Position des Fensters kann mithilfe des Arguments origin geändert werden.)

+0

Das passiert also in jeder Dimension? Also für n = 3 (wie Sie verwenden) "Reflektieren" auf der ersten Spalte wäre "1 1 1", was passiert mit der Diagonalen neben der oberen linken "1"? – JEquihua

+0

Wo ist doc dafür? –

+0

Ich habe das Dokument hier gefunden: http://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html –

Verwandte Themen