在另一个矩阵的对角线上插入一个由零组成的矩阵

2024-09-28 01:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

淡化示例

<我想我有下面的矩阵A,

1  2  4  3
1  7  3  6
2  4  1  1
6  9  3  6

我想把它转换成矩阵B,它看起来像

0  0  4  4
0  0  3  6
2  4  0  0
6  9  0  0

基本上,我想要一个2x2的零矩阵,在上面给出的4x4矩阵的对角线上

需要通用解决方案

我上面提供的只是一个例子,我将使用(12961296)大小的矩阵作为输入,我想在其对角线内插入一个3x3的零矩阵

到目前为止我做了什么?

一个简单的基于范围的循环,然后像这样将值设置为零

for i in range(0, mat.shape[0] - 1, 3):
    mat[i][i] = 0
    mat[i][i + 1] = 0
    mat[i][i + 2] = 0
    mat[i + 1][i] = 0
    mat[i + 1][i + 1] = 0
    mat[i + 1][i + 2] = 0
    mat[i + 2][i] = 0
    mat[i + 2][i + 1] = 0
    mat[i + 2][i + 2] = 0

我完全理解,这是一种非常粗鲁和肮脏的方式。请建议一种快速且“简单”的方法


Tags: 方法in示例for方式range矩阵解决方案
3条回答

以下是一个无循环的解决方案:

mat = np.ones((12,12))
np.einsum('ijik->ijk',mat.reshape((4,3,4,3)))[...] = 0
mat
# array([[0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
#        [0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
#        [0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
#        [1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1.],
#        [1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1.],
#        [1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1.],
#        [1., 1., 1., 1., 1., 1., 0., 0., 0., 1., 1., 1.],
#        [1., 1., 1., 1., 1., 1., 0., 0., 0., 1., 1., 1.],
#        [1., 1., 1., 1., 1., 1., 0., 0., 0., 1., 1., 1.],
#        [1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0.],
#        [1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0.],
#        [1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0.]])

这应该可以解决这个问题:

your_matrix = [
    [1, 2, 4, 3],
    [1, 7, 3, 6],
    [2, 4, 1, 1],
    [6, 9, 3, 6]
]

def calculate(matrix, x, y, size):
    for index, x_row in enumerate(matrix):
        for add in range(size):
            if index == y+add:
                for add_2 in range(size):
                    x_row[x+add_2] = 0

    return matrix


your_matrix = calculate(matrix=your_matrix, x=1, y=1, size=2)
print(your_matrix)

x,y在0框的左上角,大小是您想要的框的大小

您可以尝试以下方法:

start=0
stop=1296
step=3
for i in np.arange(start=start, stop=stop, step=step):
    mat[i:i+step, i:i+step] = 0

相关问题 更多 >

    热门问题