将 PyTorch 变量复制到 Numpy 数组
Copying a PyTorch Variable to a Numpy array
假设我在 GPU 中有一个 PyTorch 变量:
var = Variable(torch.rand((100,100,100))).cuda()
将此变量复制(而不是桥接)到 NumPy 数组的最佳方法是什么?
var.clone().data.cpu().numpy()
或
var.data.cpu().numpy().copy()
通过 运行 快速基准测试,.clone()
比 .copy()
稍快。但是,.clone()
+ .numpy()
将创建一个 PyTorch 变量和一个 NumPy 桥,而 .copy()
将创建一个 NumPy 桥 + 一个 NumPy 数组。
这是一个很有趣的问题。在我看来,这个问题有点opinion-based,我想谈谈我的看法。
从以上两种方法来看,我更喜欢第一种(使用clone()
)。由于您的目标是复制信息,因此本质上您需要投入额外的内存。 clone()
和 copy()
应该占用相似的存储量,因为创建 numpy 桥不会导致额外的内存。另外,我不明白你的意思,copy() 将创建两个 numPy 数组。正如你提到的,clone()
比 copy()
快,我没有看到使用 clone()
的任何其他问题。
如果有人可以提供一些反驳论据,我很乐意对此再考虑一下。
因为clone()
是recorded by AD second options is less intense. There are 你也可以考虑。
假设我在 GPU 中有一个 PyTorch 变量:
var = Variable(torch.rand((100,100,100))).cuda()
将此变量复制(而不是桥接)到 NumPy 数组的最佳方法是什么?
var.clone().data.cpu().numpy()
或
var.data.cpu().numpy().copy()
通过 运行 快速基准测试,.clone()
比 .copy()
稍快。但是,.clone()
+ .numpy()
将创建一个 PyTorch 变量和一个 NumPy 桥,而 .copy()
将创建一个 NumPy 桥 + 一个 NumPy 数组。
这是一个很有趣的问题。在我看来,这个问题有点opinion-based,我想谈谈我的看法。
从以上两种方法来看,我更喜欢第一种(使用clone()
)。由于您的目标是复制信息,因此本质上您需要投入额外的内存。 clone()
和 copy()
应该占用相似的存储量,因为创建 numpy 桥不会导致额外的内存。另外,我不明白你的意思,copy() 将创建两个 numPy 数组。正如你提到的,clone()
比 copy()
快,我没有看到使用 clone()
的任何其他问题。
如果有人可以提供一些反驳论据,我很乐意对此再考虑一下。
因为clone()
是recorded by AD second options is less intense. There are