Ich kann wirklich nicht genau sagen, wie Masken in Numpy funktionieren.Wie man eine quadratische Maske in numpy erzeugt und anwendet
erstelle ich eine Maske wie
import numpy
def make_mask(center_x,center_y,len_x,len_y):
x,y = numpy.ogrid[:len_x, :len_y]
mask = (center_x-x)**2 + (center_y-y)**2
return mask
Dann versuche ich es
>>>a = numpy.ones((10,10))
>>>mask = make_mask(2,2,2,2,2)
>>>a[mask] = 0
>>>a
array([[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0]])
zu verwenden, was ich erwartet hatte war so etwas wie
>>>a
array([[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,0,0,1,1,1,1],
[1,1,0,0,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1]])
Ich versuche, habe ein paar verschiedene Versionen der Funktion. Ich kann das gewünschte Verhalten nicht erreichen. Was mache ich falsch. Ich verstehe wirklich nicht, wie eine 2D-Matrix eine 2D-Matrix indiziert.
Könnten Sie alle schreiben dein Code? Momentan definiert Ihre 'make_mask'-Funktion nicht' center_x' oder 'center_y' und funktioniert nicht wie vorgesehen. Es sei denn, Sie haben gemeint, dass 'center_x' und' center_y' 'index_x' und' index_y' sind. Wie auch immer, es funktioniert nicht so, wie Sie es bereitgestellt haben. –
Außerdem gibt es einen fünften Parameter in Ihrem Aufruf 'make_mask'. – Benjamin
Aber ich denke, was Sie suchen, ist Slice-Notation: http://StackOverflow.com/Questions/509211/Explain-Pythons-Slice-Notation. Ich würde diesen Link auschecken, ich glaube, das wird helfen. –