C++ 什么';检查火炬::张量是否为空的最佳方法是什么?
我目前正在使用C++ 什么';检查火炬::张量是否为空的最佳方法是什么?,c++,torch,libtorch,C++,Torch,Libtorch,我目前正在使用has_storage()方法检查张量是否为空,但我想知道是否还有比这更好的方法!除了初始化的torch::Tensor总是有存储空间而空的没有存储空间这一事实之外,使用它是否还有其他含义呢 是的,这里有一个细微的差别:所有的张量都没有相同的底层实现,有些实现将具有has\u存储returnfalse,无论发生什么情况。稀疏张量的情况尤其如此(参见) 然而,我不知道有什么更好的办法。如果你使用稀疏张量(以及你的,如果你需要它们的话,^^^^)经过一番挖掘,发现最好的解决方案是使用.
has_storage()
方法检查张量是否为空,但我想知道是否还有比这更好的方法!除了初始化的torch::Tensor
总是有存储空间而空的没有存储空间这一事实之外,使用它是否还有其他含义呢 是的,这里有一个细微的差别:所有的张量都没有相同的底层实现,有些实现将具有has\u存储
returnfalse
,无论发生什么情况。稀疏张量的情况尤其如此(参见)
然而,我不知道有什么更好的办法。如果你使用稀疏张量(以及你的,如果你需要它们的话,^^^^)经过一番挖掘,发现最好的解决方案是使用
.numel()
方法,该方法返回张量的元素数。总之:
- 要知道是否分配了张量(类型和存储),请使用defined()
- 要知道分配的张量是否有零元素,请使用
numel()
- 要知道是否分配了张量以及它是否有零元素,请使用
,然后使用defined()
numel()
使用
.numel()
时,空张量(例如使用torch::tensor t;
创建的张量)返回零。而大小/大小将导致异常
对于返回空张量(在我刚才解释的意义上)的情况,这是一个完整的检查,您可以简单地执行以下操作:
if(!tensor.numel())
{
再次感谢你。非常感谢你抽出时间和解释清楚的答案