numpy.transpose的时间复杂度



np.transpose的时间复杂度是多少?

在我看来,它在内部循环了两个 for 循环,所以,这意味着它应该具有 O(n2( 复杂性,但有人可以确认吗? 另外,有什么办法可以降低矩阵转置的时间复杂度

在内存中,矩阵表示为连续内存块,就好像它是一个一维数组一样。N维是我们人类用来使问题更容易理解的抽象。对于 numpy,转置矩阵只是轴的变化,但内存不会改变。

所以时间复杂度是O(1(,因为要转置数组,numpy 只是交换每个轴的形状和步幅信息。

无需复制任何数据即可实现此目的。Numpy 可以简单地改变它在底层内存上的外观来构造新数组。

如果你想加深这个话题,你可以看到这个带有插图的美丽答案

它是O(1(,因为它根本不复制数据。 只是修改形状和步伐。

>>> A = np.random.rand(3,4)
>>> A.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
>>> np.transpose(A).flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

请注意,C_CONTIGUOUSF_CONTIGUOUS被交换(即主要的迭代顺序更改(,并且转置的数组OWNDATAfalse(即它只是原始数组数据的一个视图(。

相关提示:当您有这样的视图时,要查找拥有数据的数组,您可以检查base属性

>>> np.transpose(A).base is A
True

是的,除此之外,我们还可以使用zip转置矩阵

list(zip(*matrix))

最新更新