简而言之:我有两个矩阵(或数组):
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]])
我有block_2
在block_1
元素坐标系中的位移。
pos = (1,1)
我希望能够(快速)添加它们,以获得:
[[0 0 0 0 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
长话短说:我想用一种快速的方法把两个不同形状的矩阵加在一起,其中一个矩阵可以移位。得到的矩阵必须具有第一个矩阵的形状,并且两个矩阵之间的重叠元素求和。如果没有重叠,则只返回第一个未变异的矩阵。
我有一个很好的函数,但它有点难看,从元素上来说:
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
广播或切片也许能做到这一点吗?
我觉得也许我遗漏了一些显而易见的东西。
一个类似于MATLAB的简单解决方案是:
所以把它打包成一个可重用的函数:
只需找到重叠区域,然后使用切片添加数组。
它们已添加到位,但您也可以创建一个新数组。不过,我可能漏掉了一些角落里的案子,但看起来效果不错。
这很好,下面是如何通过在jorgeca的代码中添加几行来扩展对3D矩阵的添加:
这可能有助于那些想在3d中做同样事情的人(比如我)。
相关问题 更多 >
编程相关推荐