it-swarm.com.de

Downsampling eines 2d-numpy-Arrays in Python

Ich lerne selbst Python und habe ein Problem gefunden, das das Downsampling eines Merkmalsvektors erfordert. Ich brauche Hilfe, um zu verstehen, wie ein Array downsampling wird. In dem Array stellt jede Zeile ein Bild dar, wobei es sich um die Nummer von 0 bis 255 handelt. Ich habe mich gefragt, wie Sie das Downsampling auf das Array anwenden? Ich möchte nicht scikit-learn, weil ich verstehen möchte, wie Downsampling angewendet wird ..__ Wenn Sie auch Downsampling erklären könnten, wäre das erstaunlich, danke. 

der Merkmalsvektor ist 400x250

8
Neo Streets

Wenn Sie mit Downsampling etwas wie dieses meinen, können Sie das Array einfach in Scheiben schneiden. Für ein 1D-Beispiel:

import numpy as np
a = np.arange(1,11,1)
print(a)
print(a[::3])

Die letzte Zeile ist äquivalent zu:

print(a[0:a.size:3])

mit der Slicing-Notation als start:stop:step

Ergebnis:

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

[1 4 7 10]

Für ein 2D-Array ist die Idee dieselbe:

b = np.arange(0,100)
c = b.reshape([10,10])
print(c[::3,::3])

Dadurch erhalten Sie in beiden Dimensionen jedes dritte Element des ursprünglichen Arrays. 

Oder, wenn Sie nur eine einzelne Dimension herunterfahren möchten:

d = np.zeros((400,250))
print(d.shape)
e = d[::10,:]
print(e.shape) 

(400, 250)

(40, 250)

Das sind viele andere Beispiele in das Numpy-Handbuch

15
Bart

Ich gehe davon aus, dass Sie alle anderen Zeilen und Spalten der Matrix entfernen möchten. Hier ist ein einfaches Beispiel mit einem zweidimensionalen numpy-Array:

import numpy as np
a=np.arange(0,16).reshape(4,4)
dc=a[:,range(0,a.shape[1],2)]
drdc=dc[range(0,a.shape[0],2),:]
print(a)
print(drdc)

Die Ausgabe ist:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 0  2]
 [ 8 10]]
0
ashkan