Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用列表理解在Python中转置多维矩阵_Python_Matrix_List Comprehension - Fatal编程技术网

使用列表理解在Python中转置多维矩阵

使用列表理解在Python中转置多维矩阵,python,matrix,list-comprehension,Python,Matrix,List Comprehension,我有一个Python赋值,在这里我必须转置一个多维矩阵3x3,4x4,5x5。。。不使用任何for循环,但仅使用列表理解 作为2x2矩阵的示例,我们有: a2 = [[1, 2], [3, 4]] n = len(a2) print [[row[i] for row in a2] for i in range(n)] 但我不确定我是否真的了解它是如何工作的,或者如何使它适应3x3、4x4、5x5。。。母体 比如说, a3 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]

我有一个Python赋值,在这里我必须转置一个多维矩阵3x3,4x4,5x5。。。不使用任何for循环,但仅使用列表理解

作为2x2矩阵的示例,我们有:

a2 = [[1, 2], [3, 4]]
n = len(a2)
print [[row[i] for row in a2] for i in range(n)]
但我不确定我是否真的了解它是如何工作的,或者如何使它适应3x3、4x4、5x5。。。母体

比如说,

a3 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
我不一定要你给我答案,我还得自己弄清楚,但任何暗示都会很有帮助


提前谢谢

这是一个内置的-

请注意,调用list是为了显示结果,在3.x中,这将生成一个iterable,而不是一个懒惰的列表,从而提供内存优势。在2.x中,它仍然返回一个列表

如果您想在具有更多嵌套列表的示例中转置内部部分,那么使用列表理解在子列表上运行zip相对简单

2.x中的示例便于阅读:

>>> zip(*(zip(*part) for part in [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]))
[((1, 3), (5, 7)), ((2, 4), (6, 8))]

这是一个内置的-

请注意,调用list是为了显示结果,在3.x中,这将生成一个iterable,而不是一个懒惰的列表,从而提供内存优势。在2.x中,它仍然返回一个列表

如果您想在具有更多嵌套列表的示例中转置内部部分,那么使用列表理解在子列表上运行zip相对简单

2.x中的示例便于阅读:

>>> zip(*(zip(*part) for part in [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]))
[((1, 3), (5, 7)), ((2, 4), (6, 8))]

我很确定你的例子中已经有了

a2 = [[1, 2], [3, 4]]  #2x2
n = len(a2)
print [[row[i] for row in a2] for i in range(n)]

a2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  #3x3
n = len(a2)
print [[row[i] for row in a2] for i in range(n)]
对象:

a3 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
不是2x2、3x3或4x4,而是2x2x2。您需要准确地解释转置对于该数据结构意味着什么


作为补充说明,如果您没有列表理解作为约束,那么使用Lattyware建议的zip是您应该这样做的方式-我只是想指出,您的解决方案已经适用于NxN案例。

我很确定您的示例中已经有了它

a2 = [[1, 2], [3, 4]]  #2x2
n = len(a2)
print [[row[i] for row in a2] for i in range(n)]

a2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  #3x3
n = len(a2)
print [[row[i] for row in a2] for i in range(n)]
对象:

a3 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
不是2x2、3x3或4x4,而是2x2x2。您需要准确地解释转置对于该数据结构意味着什么


作为旁注,如果您没有列表理解作为约束,那么使用Lattyware建议的zip是您应该这样做的方式-我只是想指出,您的解决方案已经适用于NxN案例。

您有一个2x2x2。。。我不确定在这种情况下转置的实际含义…你的问题是含糊不清的-你在标题中陈述了多维,但你所说的所有情况都是二维3x3,4x4,5x5。。。。我猜你想把2D的情况扩展到任意的n,而不是n维的转置,因为后一种情况需要对转置的实际含义进行严格的定义。谢谢你的提示!我得承认我已经很久没有研究矩阵了。。。我得复习一下我的知识!你有一个2x2x2的。。。我不确定在这种情况下转置的实际含义…你的问题是含糊不清的-你在标题中陈述了多维,但你所说的所有情况都是二维3x3,4x4,5x5。。。。我猜你想把2D的情况扩展到任意的n,而不是n维的转置,因为后一种情况需要对转置的实际含义进行严格的定义。谢谢你的提示!我得承认我已经很久没有研究矩阵了。。。我得复习一下我的知识-1、这是一种不好的值转置方法。它只适用于列表,比zip慢。@Lattyware-我同意zip好得多。但这是作为作业的约束条件写的,但只使用列表理解。他对循环说“不”,他从来没有说“不内置”。@Lattyware-他说但只使用列表理解-zip不是列表理解。。。我们讨论这件事是愚蠢的。我已经承认,在一般情况下,zip是无限好的,我只关心满足约束条件,并向OP指出,在他定义这意味着什么之前,数据结构a3没有有意义的转置…范围也没有。我明白你的意思,但在我看来,这里的实际问题是转换嵌套更深的列表,这可以通过列表理解和压缩来完成。我想这可能是这个练习的重点,但我承认这是相当模糊的。不管怎样,我都会删除我的-1,因为这可能有点太多了。编辑:做了一个编辑,这样我就可以删除我的-1.-1,这是一个不好的转置值的方法。它只适用于列表,比zip慢。@Lattyware-我同意zip好得多。但这是作为作业的约束条件写的,但只使用列表理解。他对循环说“不”,他从来没有说“不内置”。@Lattyware-他说但只使用列表理解-zip不是列表理解。。。我们讨论这件事是愚蠢的。我已经承认,在一般情况下,zip是无限好的,我只是关心sa
满足约束条件,并向OP指出,数据结构a3在他定义其含义之前没有有意义的转置……范围也没有。我明白你的意思,但在我看来,这里的实际问题是转换嵌套更深的列表,这可以通过列表理解和压缩来完成。我想这可能是这个练习的重点,但我承认这是相当模糊的。不管怎样,我都会删除我的-1,因为这可能有点太多了。编辑:进行编辑,以便删除我的-1。谢谢,我相信这是最简单的解决方案!:-谢谢,我相信这是最简单的解决办法!:-