将可变大小的张量流张量转换为C+中的std::vector+; < P> >我有一个给定的C++ TysFooSurviv::张量< /代码>(变量形状)对象.< /P>

将可变大小的张量流张量转换为C+中的std::vector+; < P> >我有一个给定的C++ TysFooSurviv::张量< /代码>(变量形状)对象.< /P>,c++,tensorflow,C++,Tensorflow,我想把它转换成一个std::vector(在多维向量的情况下是嵌套向量) 有没有干净的方法可以做到这一点 谢谢 不是真的,不是 您可以创建一个向量,并嵌套这些向量,但是使用这些向量的代码将非常混乱 如果在编译时知道要对哪些形状进行操作,可以使用 temlate<size_t N, typename T> struct tensor_traits { using type = std::vector<tensor_traits<N-1, T>::type>

我想把它转换成一个
std::vector
(在多维向量的情况下是嵌套向量)

有没有干净的方法可以做到这一点

谢谢

不是真的,不是

您可以创建一个
向量
,并嵌套这些向量,但是使用这些向量的代码将非常混乱

如果在编译时知道要对哪些形状进行操作,可以使用

temlate<size_t N, typename T>
struct tensor_traits {
    using type = std::vector<tensor_traits<N-1, T>::type>;
}

template<typename T>
struct tensor_traits<0, T> {
    using type = T;
}

template<size_t N, typename T>
tensor_traits<N, T>::type toVector(const tensorflow::Tensor & input)
{
    assert(/* shape and type match */);
    tensor_traits<N, T>::type result;
    for(size_t i = 0; i < input.dim_size(0); ++i)
    {
        result.push_back(toVector<N-1, T>(input[i])); 
        // Or however you get a smaller Tensor from a larger one. The documentation is unclear
    }
    return result;
}

template<typename T>
T toVector<0, T>(const T & input)
{
    return input; 
    // Base case of single value
}
temlate
结构张量{
使用type=std::vector;
}
模板
结构张量{
使用类型=T;
}
模板
tensor_traits::type to向量(常量tensorflow::tensor&input)
{
断言(/*形状和类型匹配*/);
张量特征::类型结果;
对于(大小i=0;i
好吧,我需要将张量插入另一个代码中,该代码使用std嵌套向量。。。如果我有一个简单的迭代器,那么我需要先验地知道维度,以保持我假设的维度。你有像
void doStuff(vector&input)
这样的函数吗?你可以做一个函数,将特定形状的张量转换成该形状的向量,但这不是一般的是的,你是对的。对于迭代器,
For(auto-it=std::begin(Y_pred);it!=std::end(Y_pred);++it){…}
对我不起作用
Y_pred
是一个张量流张量。你想用这个向量实现什么?你知道张量有多少维吗?否则,如果不使用某种多态性,甚至无法命名向量的类型,这将使一切变得复杂。