Python 为什么张量变量占用的内存这么小?

Python 为什么张量变量占用的内存这么小?,python,numpy,pytorch,tensor,numpy-ndarray,Python,Numpy,Pytorch,Tensor,Numpy Ndarray,在Pytorch 1.0.0中,我发现张量变量占用的内存非常小。我想知道它是如何存储这么多数据的。 这是密码 a = np.random.randn(1, 1, 128, 256) b = torch.tensor(a, device=torch.device('cpu')) a_size = sys.getsizeof(a) b_size = sys.getsizeof(b) a_大小为262288b_大小为72。答案分为两部分。从文献资料来看,首先 所有内置对象都将返回正确的结果,但这对

在Pytorch 1.0.0中,我发现
张量
变量占用的内存非常小。我想知道它是如何存储这么多数据的。
这是密码

a = np.random.randn(1, 1, 128, 256)
b = torch.tensor(a, device=torch.device('cpu'))

a_size = sys.getsizeof(a)
b_size = sys.getsizeof(b)

a_大小为262288<代码>b_大小
为72。

答案分为两部分。从文献资料来看,首先

所有内置对象都将返回正确的结果,但这对于第三方扩展不一定是真的,因为它是特定于实现的

因此,对于张量,
\uuuuu sizeof\uuuu
可能是未定义的,或者定义方式与您预期的不同-此函数不是您可以依赖的。其次

只考虑直接归因于对象的内存消耗,而不考虑它所指对象的内存消耗

这意味着,如果
torch.Tensor
对象仅包含对实际内存的引用,则这不会显示在
sys.getsizeof
中。事实确实如此,如果您检查底层的大小,您将看到预期的数字

import torch, sys
b = torch.randn(1, 1, 128, 256, dtype=torch.float64)
sys.getsizeof(b)
>> 72
sys.getsizeof(b.storage())
>> 262208

注意:我明确地将
dtype
设置为
float64
,因为这是
numpy
中的默认
dtype
,而
torch
默认使用
float32

非常好的答案,会给指向
存储的指针另一个+1。超级有帮助的知道!