Kurz gesagt: Ich habe zwei Matrizen (oder Arrays):Hinzufügen verschiedene Größe/Form verschoben NumPy Matrizen
import numpy
block_1 = numpy.matrix([[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
block_2 = numpy.matrix([[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1]])
Ich habe die Verschiebung der block_2
im block_1
Element-Koordinatensystem.
pos = (1,1)
Ich möchte in der Lage sein, sie (schnell) hinzuzufügen, zu erhalten:
[[0 0 0 0 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
In lange: Ich würde eine schnelle Art und Weise wie zwei verschiedene Form hinzufügen Matrizen zusammen, wo eine der Matrizen können verschoben werden. Die resultierende Matrix muss die Form der ersten Matrix haben, und die überlappenden Elemente zwischen den zwei Matrizen werden summiert. Wenn es keine Überlappung gibt, wird nur die erste Matrix unmutiert zurückgegeben.
Ich habe eine Funktion, die in Ordnung, aber es ist irgendwie hässlich, und element funktioniert:
def add_blocks(block_1, block_2, pos):
for i in xrange(0, block_2.shape[0]):
for j in xrange(0, block_2.shape[1]):
if (i + pos[1] >= 0) and (i + pos[1] < block_1.shape[0])
and (j + pos[0] >= 0) and (j + pos[0] < block_1.shape[1]):
block_1[pos[1] + i, pos[0] + j] += block_2[i,j]
return block_1
Kann Rundfunk oder Aufschneiden dies vielleicht tun?
Ich fühle mich, als ob ich etwas Offensichtliches vermisse.
Ich habe etwas sehr ähnliches getan. Die Fähigkeit, Slice-Objekte zu erstellen, ist wirklich großartig, danke dafür! – fraxel
Ich denke, die v_range1 und h_range1 Code fehlt ein abschließendes ')'. –
Danke! Ich habe das gerade behoben. – jorgeca