小编LIU*_*uan的帖子

在 Torch C++ API 中,如何快速写入张量的内部数据?

我正在使用 Torch C++ 前端并希望在其中包含一个具有指定值的张量。为了实现这一点,可以手动分配内存并设置值,然后使用torch::from_blob在内存块上构建张量,但对我来说似乎不够干净。

这个文档的最底部我发现我可以使用下标直接访问和修改数据。然而,这种方法有很大的运行时间开销,可能是因为下标访问会将张量的元素视为 0-d 张量。以下代码在我的机器上会花费超过 2 秒(-O3优化级别),这对于现代 CPU 来说太长了。

    torch::Tensor tensor = torch::empty({1000, 1000});
    for(int i=0; i < 1000; i++)
    {
        for(int j=0 ; j < 1000; j++)
        {
            tensor[i][j] = calc_tensor_data(i,j);
        }
    }
Run Code Online (Sandbox Code Playgroud)

有没有干净快速的方法来实现这个目标?

c++ pytorch libtorch

4
推荐指数
1
解决办法
1088
查看次数

Eigen LinSpaced - 不推荐使用的复制警告

在我的项目中,编译器抱怨以下(以及许多其他类似的)代码片段:

    Eigen::ArrayXf window =
            Eigen::ArrayXf::LinSpaced(2*M + 1, 0, M_PI)
            .head(2*M)
            .sin();
Run Code Online (Sandbox Code Playgroud)

警告信息很长且无法阅读,所以我不会在这里发布所有内容。触发的警告是-Wdeprecated-copy,警告消息的核心部分(在我看来)如下

warning: implicitly-declared ‘Eigen::Block<const Eigen::CwiseNullaryOp<Eigen::internal::linspaced_op<float, __vector(4) float>, Eigen::Array<float, -1, 1> >, -1, 1, false>::Block(const Eigen::Block<const Eigen::CwiseNullaryOp<Eigen::internal::linspaced_op<float, __vector(4) float>, Eigen::Array<float, -1, 1> >, -1, 1, false>&)’ is deprecated [-Wdeprecated-copy]
note: because ‘Eigen::Block<const Eigen::CwiseNullaryOp<Eigen::internal::linspaced_op<float, __vector(4) float>, Eigen::Array<float, -1, 1> >, -1, 1, false>’ has user-provided ‘Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>& Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>::operator=(const Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>&) [with XprType = const Eigen::CwiseNullaryOp<Eigen::internal::linspaced_op<float, __vector(4) float>, Eigen::Array<float, -1, …
Run Code Online (Sandbox Code Playgroud)

c++ eigen c++11

1
推荐指数
1
解决办法
1783
查看次数

C++:用整数移动语义

int c = 2;
int d = std::move(c);
std::cout << "c is: " << c << std::endl;
std::cout << "d is: " << d << std::endl;
Run Code Online (Sandbox Code Playgroud)

此代码输出:

c是:2

d 是:2

我认为在 move(c) 到 d 之后,c 将是空的,为什么它的值仍然是 2?你能帮我解释一下吗?谢谢你。

c++ move-semantics c++11

1
推荐指数
1
解决办法
321
查看次数

标签 统计

c++ ×3

c++11 ×2

eigen ×1

libtorch ×1

move-semantics ×1

pytorch ×1