2017-10-18 101 views
0

Python中是否有任何简短的方式来打印一个更大的矩阵像这样的子矩阵不使用for循环?如何在python中打印子矩阵?

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] 

sub1 = matrix[1:2][1:2] 
>>>desired answer: [[6,7][10,11]] 
1 2 3 4 
5 *6 7* 8 
9 *10 11* 12 
13 14 15 16 

sub2 = matrix[2][1:3] 
>>>desired answer: [[7,11,15]] 
1 2 3 4 
5 6 *7* 8 
9 10 *11* 12 
13 14 *15* 16 

extra:对于后面的例子,如何以不使用reverse()的反向格式返回它?即:[15,11,7][16,15,14]

+0

他添加了numpy标签,我只考虑numpy数组(正如我所提到的)。不过谢谢! – sascha

+1

@sascha哦,有趣的一点 - 我想这不是清楚这些应该是numpy矩阵还是列表清单。 –

+1

假设numpy数组(你标记了它):如果你想做sub1 = matrix [1:3,1:3](包围!),你会达到你想要的答案!你知道Python的切片风格模仿numpy(包括,独家)吗?例2:矩阵[1:4,2]。 (包围!)对于列表(没有numpy)列表,看看汤姆的答案! (由于错误和编辑时间已经结束,因此修改了此评论) – sascha

回答

2

对于列表的列表,你可以得到你想要的结果是这样的:

>>> [s[1:3] for s in matrix[1:3]] 
[[6, 7], [10, 11]] 
>>> 
>>> [s[2:3] for s in matrix[1:4]] 
[[7], [11], [15]] 
>>> 

注意,后者是一个垂直切片,所以每个元素都被包裹在自己的名单。另请注意,这是Python索引,因此范围说明符中的第二个限制比片中的最后一个索引高一个。

+0

谢谢!为我工作。你是否会提供numpy解决方案以供进一步参考。 – DragonKnight

+1

@DragonKnight numpy-solution在评论中! – sascha

+1

查看numpy解决方案的顶级评论 - 查看sascha和coldspeed的评论。 –