Here's
C++实现
empty
源代码中的out参数。
Tensor& empty_out(Tensor& result, IntList size) {
if (result.is_sparse()) {
result.sparse_resize_and_clear_(size, size.size(), 0);
} else {
result.resize_(size);
}
return result;
}
所以对于稠密张量,它所做的就是适当地调整张量的大小——在您的例子中,大小是相同的。
In [21]: x = torch.ones((5, 3), dtype=torch.double)
In [22]: torch.empty((2, 3), out=x)
Out[22]:
tensor([[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
In [23]: torch.empty((2, 8), out=x)
Out[23]:
tensor([[ 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00,
1.0000e+00, 1.0000e+00, 1.0000e+00],
[ 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00,
1.0000e+00, 1.0000e+00, 4.6631e-310]], dtype=torch.float64)
首先,
空的
不释放内存-它只关心适当大小的张量的分配。在你的例子中,这样的张量已经被分配了,所以
空的
无事可做……它不会在内存的其他地方分配一个新的空张量。在第二
空的
上面的例子,我们被迫为一个更大的张量分配(2*8=16,而5*3=15),我们可以看到这个空数组中的最后一个元素是垃圾,因为它超出了先前初始化的连续内存块。
空的
不会强制清除整个张量为0或类似的值,因为它是未初始化的数据。