Python 将列表子索引为块矩阵X=[[a,B],[C,D]]

Python 将列表子索引为块矩阵X=[[a,B],[C,D]],python,algorithm,matrix,Python,Algorithm,Matrix,让 如何输出子矩阵,使X=[[A,B],[C,D]] X = [[2,3, 5, 6], [4,5, 9, 10], [6,1, 3, 9], [3,7, 11, 12]] 没有numpy,你可以这样做 A = [[2, 3], [4,5]] B = [[5,6], [9, 10]] C = [[6, 1], [3,7]] D = [[3,9], [

如何输出子矩阵,使X=[[A,B],[C,D]]

X = [[2,3, 5, 6], 
     [4,5, 9, 10], 
     [6,1, 3, 9], 
     [3,7, 11, 12]]

没有numpy,你可以这样做

    A = [[2, 3], 
         [4,5]]
    B = [[5,6], 
        [9, 10]] 
    C = [[6, 1], 
         [3,7]]
    D = [[3,9], 
        [11, 12]] 

假设X始终是4X4矩阵,您可以尝试此操作:

X = [[2,3, 5, 6], 
         [4,5, 9, 10], 
         [6,1, 3, 9], 
         [3,7, 11, 12]]

for i in X:
   print([i[ :len(i)//2],i[len(i)//2:]])

对于第一个子矩阵,您可以使用

X = [[2,3, 5, 6], 
 [4,5, 9, 10], 
 [6,1, 3, 9], 
 [3,7, 11, 12]]

new_matrix = [[X[i][:2], X[i+1][:2]] for i in range(0, len(X), 2)]
new_matrix.extend([[X[i][2:], X[i+1][2:]] for i in range(0, len(X), 2)]) 
print(new_matrix)

(与其他类似)

使用Numpy的解决方案如下所示:

A = [row[:2] for row in X[:2]]

这里有一个不使用numpy的解决方案

A = X[0:2, 0:2]
B = X[0:2, 2:4]
C = X[2:4, 0:2]
D = X[2:4, 2:4]

一行程序版本,但可读性稍差

A = [X[i][:2] for i in range(2)]
B = [X[i][2:] for i in range(2)]
C = [X[i][:2] for i in range(2,4)]
D = [X[i][2:] for i in range(2,4)]

>>> A
[[2, 3], [4, 5]]
>>> B
[[5, 6], [9, 10]]
>>> C
[[6, 1], [3, 7]]
>>> D
[[3, 9], [11, 12]]

“到目前为止,您尝试了什么?”帕迪,这在Matlab中是微不足道的。对于Python,我尝试了A=x[:2][:2][:2],但没有效果。最好将它们转换为Numpy数组。然后只需要给出开始索引。@sbimb非常确定X[:2]与X[0:2]相同。类似的问题:您有一个语法错误——一个额外的括号。另外,A的输出是
[[5,6],[2,3]]
,这不是OP想要的。@rassar捕捉得好,谢谢
>>> (A,B),(C,D)= [([X[i][:2],X[i+1][:2]],[X[i][2:],X[i+1][2:]]) for i in range(0,len(X),2)]
>>>
>>? A
[[2, 3], [4, 5]]
>>? B
[[5, 6], [9, 10]]
>>? C
[[6, 1], [3, 7]]
>>? D
[[3, 9], [11, 12]]
>>?