如何将numpy ndarray转置到位?

时间:2018-09-02 11:41:41

标签: python numpy

我正在使用numpy。

我有一个形状为[T,H,W,C]的ndarray,我想将它转置为[T,C,H,W]。但是,此数组很大,我想提高内存效率。

但是我只是发现np.transpose是这样做的,不是就地

为什么np.transpose之类的操作没有适当的位置?

我曾经认为任何名为np.Bar的操作都将其就地对应名为np.Bar_,只是发现这不是事实。

1 个答案:

答案 0 :(得分:5)

来自np.transpose文档

  

尽可能返回视图。

表示没有为输出数组分配额外的内存。

>>> import numpy as np

>>> A = np.random.rand(2, 3, 4, 5)
>>> B = np.transpose(A, axes=(0, 3, 1, 2))

>>> A.shape
(2, 3, 4, 5)
>>> B.shape
(2, 5, 3, 4)

您可以使用np.shares_memory来检查B是否是A的视图:

>>> np.shares_memory(A, B)
True

因此,您可以使用np.transpose安全地转置数据。