Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';检查火炬::张量是否为空的最佳方法是什么?_C++_Torch_Libtorch - Fatal编程技术网

C++ 什么';检查火炬::张量是否为空的最佳方法是什么?

C++ 什么';检查火炬::张量是否为空的最佳方法是什么?,c++,torch,libtorch,C++,Torch,Libtorch,我目前正在使用has_storage()方法检查张量是否为空,但我想知道是否还有比这更好的方法!除了初始化的torch::Tensor总是有存储空间而空的没有存储空间这一事实之外,使用它是否还有其他含义呢 是的,这里有一个细微的差别:所有的张量都没有相同的底层实现,有些实现将具有has\u存储returnfalse,无论发生什么情况。稀疏张量的情况尤其如此(参见) 然而,我不知道有什么更好的办法。如果你使用稀疏张量(以及你的,如果你需要它们的话,^^^^)经过一番挖掘,发现最好的解决方案是使用.

我目前正在使用
has_storage()
方法检查张量是否为空,但我想知道是否还有比这更好的方法!除了初始化的
torch::Tensor
总是有存储空间而空的没有存储空间这一事实之外,使用它是否还有其他含义呢

是的,这里有一个细微的差别:所有的张量都没有相同的底层实现,有些实现将具有
has\u存储
return
false
,无论发生什么情况。稀疏张量的情况尤其如此(参见)


然而,我不知道有什么更好的办法。如果你使用稀疏张量(以及你的,如果你需要它们的话,^^^^)

经过一番挖掘,发现最好的解决方案是使用
.numel()
方法,该方法返回张量的元素数。
总之:

  • 要知道是否分配了张量(类型和存储),请使用defined()
  • 要知道分配的张量是否有零元素,请使用
    numel()
  • 要知道是否分配了张量以及它是否有零元素,请使用
    defined()
    ,然后使用
    numel()
旁注:
使用
.numel()
时,空张量(例如使用
torch::tensor t;
创建的张量)返回零。而大小/大小将导致异常

对于返回空张量(在我刚才解释的意义上)的情况,这是一个完整的检查,您可以简单地执行以下操作:

if(!tensor.numel())
{

再次感谢你。非常感谢你抽出时间和解释清楚的答案