在某些位置添加子矩阵

时间:2015-09-19 09:27:03

标签: python numpy matrix

我有一个40x40的测试矩阵(z),用零填充。

我需要在测试矩阵的特定位置添加4个形状的子矩阵,称为c1,c2(5x5),c3(7x7)和c4(9x9)。

我想将子矩阵中心放在相应的位置,然后简单地执行元素的添加。 测试矩阵中的位置是: z(9,9),z(9,29),z(29,9),z(29,29)。

我试着查看这些主题,但我无法就如何解决我的问题得到明确答案。 How to add different arrays from the center point of an array in Python/NumPy Adding different sized/shaped displaced NumPy matrices

我尝试过的代码示例:

def zero_matrix(d):
    matrix = np.zeros((d,d), dtype=np.float)
    return matrix

z = zero_matrix(40)

c1 = np.genfromtxt('xxxxxx', dtype=None, delimiter = '\t')
c2 = np.genfromtxt('xxxxxx', dtype=None, delimiter = '\t')
c3 = np.genfromtxt('xxxxxx', dtype=None, delimiter = '\t')
c4 = np.genfromtxt('xxxxxx', dtype=None, delimiter = '\t')


def adding(z):
    for i in range(z.shape[0]):
        for j in range(z.shape[1]):
            if i == 9 and j==9:
                c1mid = c1.shape[0]//2
                z[i,j] = c1[c1mid,c1mid]
    print z
    return z

但这只会增加中心,而不是整个子矩阵。

应该如下所示: Test matrix design

1 个答案:

答案 0 :(得分:1)

关于numpy中数组切片的好处是你不需要你正在使用的for循环。另外它只是放置中心元素的原因是因为你只在那里放了一个元素(c1 [c1mid,c1mid]是一个数字)这里你可以做到:

    z[7:12,7:12] = c1
    z[7:12,27:32] = c2
    z[26:33,6:14] = c3
    z[25:34,25:33] = c4