根据值将矩阵分成两个相等的矩阵

问题描述 投票:-1回答:1

[我想将此矩阵拆分为两个矩阵,这样当我将两个拆分的矩阵求和时,需要获得原始矩阵。

Amp =  array([[1., 1., 0., 0., 0., 0.],
       [0., 1., 1., 0., 0., 0.],
       [0., 1., 0., 0., 1., 0.],
       [0., 0., 1., 0., 1., 0.],
       [0., 0., 1., 1., 0., 0.],
       [0., 0., 0., 1., 1., 0.],
       [0., 0., 0., 1., 0., 1.]]) 

拆分为:

Al =  array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0., 0.]]) 

和:

 Ar =  array([[0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]]) 

实际上,不知道如何执行此操作,因为两个值均为'1',并且始终为1(或零)。

提前感谢

python arrays matrix split size
1个回答
0
投票

我认为做到这一点的最佳方法是使用np.where,它可以为您提供满足特定条件的单元格的位置:

>>> np.where(Amp==1)
(array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]), array([0, 1, 1, 2, 1, 4, 2, 4, 2, 3, 3, 4, 3, 5]))

由于结果按行排序,因此可以交替填充A1A2

A1 = np.zeros(Amp.shape)
A2 = np.zeros(Amp.shape)
row_index, col_index = np.where(Amp==1)
for ind in range(0, len(row_index), 2):
    A1[row_index[ind], col_index[ind]] = 1
    A2[row_index[ind+1], col_index[ind+1]] = 1

© www.soinside.com 2019 - 2024. All rights reserved.