Python 将列表子索引为块矩阵X=[[a,B],[C,D]]
让 如何输出子矩阵,使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 = [[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]]
>>?