检查 torch::Tensor 是否为空的最佳方法是什么?
What's the best way of checking whether a torch::Tensor is empty?
我目前正在使用has_storage()
方法来检查张量是否为空,但我想知道是否有比这更好的方法!除了初始化的 torch::Tensor
总是有存储空间而空的没有!
之外,使用它是否有任何影响?
是的,这里有一个细微差别:所有张量都没有相同的底层实现,有些实现无论如何都会有 has_storage
return false
。稀疏张量尤其如此(参见 here)。
但是我不知道有什么更好的方法。如果您使用稀疏张量(以及您的 opaque tensors,如果您需要它们 ^^),请务必正确跟踪它们
经过一番挖掘,事实证明最好的解决方案是使用 .numel()
方法,其中 returns 张量的元素数量。
总结:
- 要知道张量是否已分配(类型和存储),请使用 defined()。
- 要知道分配的张量是否有零个元素,使用
numel()
- 要知道一个张量是否被分配以及它是否有零元素,使用
defined()
然后numel()
旁注:
空张量(例如使用 torch::Tensor t;
创建的张量)returns 在使用 .numel()
时为零,而 size/sizes 将导致异常。
对于返回空张量(在我上面刚刚解释的意义上)的情况,这是一个完美的检查。可以简单地做:
if (!tensor.numel())
{
std::cout<<"tensor is empty!" << std::endl;
// do other checks you wish to do
}
我目前正在使用has_storage()
方法来检查张量是否为空,但我想知道是否有比这更好的方法!除了初始化的 torch::Tensor
总是有存储空间而空的没有!
是的,这里有一个细微差别:所有张量都没有相同的底层实现,有些实现无论如何都会有 has_storage
return false
。稀疏张量尤其如此(参见 here)。
但是我不知道有什么更好的方法。如果您使用稀疏张量(以及您的 opaque tensors,如果您需要它们 ^^),请务必正确跟踪它们
经过一番挖掘,事实证明最好的解决方案是使用 .numel()
方法,其中 returns 张量的元素数量。
总结:
- 要知道张量是否已分配(类型和存储),请使用 defined()。
- 要知道分配的张量是否有零个元素,使用
numel()
- 要知道一个张量是否被分配以及它是否有零元素,使用
defined()
然后numel()
旁注:
空张量(例如使用 torch::Tensor t;
创建的张量)returns 在使用 .numel()
时为零,而 size/sizes 将导致异常。
对于返回空张量(在我上面刚刚解释的意义上)的情况,这是一个完美的检查。可以简单地做:
if (!tensor.numel())
{
std::cout<<"tensor is empty!" << std::endl;
// do other checks you wish to do
}