我正在使用numpy。
我有一个形状为[T,H,W,C]的ndarray,我想将它转置为[T,C,H,W]。但是,此数组很大,我想提高内存效率。
但是我只是发现np.transpose
是这样做的,不是就地。
为什么np.transpose
之类的操作没有适当的位置?
我曾经认为任何名为np.Bar
的操作都将其就地对应名为np.Bar_
,只是发现这不是事实。
答案 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
安全地转置数据。