作者:phpyi | 来源:互联网 | 2022-12-05 20:29
我正在使用numpy.
我有一个形状为[T,H,W,C]的ndarray,我想把它转换为:[T,C,H,W].但是,这个阵列非常庞大,我想要节省内存.
但我发现np.transpose
这样做并非就地.
为什么这样的操作np.transpose
没有就地对应?
我以前认为任何命名的操作np.Bar
都会以其原位对应命名np.Bar_
,但却发现这不是事实.
1> taras..:
来自np.transpose
docs
尽可能返回视图.
意味着没有为输出数组分配额外的内存.
>>> 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
.
这个想法是为了证明OP打算执行的那种转置确实会返回一个视图而不是一个副本.