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

In Torch C++ API, How to write to the internal data of a tensor fastly?

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

this文档的最底部我发现我可以使用下标直接访问和修改数据。但是,这种方法有很大的 运行 时间开销,可能是因为下标访问会将张量的元素视为 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);
        }
    }

有没有一种简洁快速的方法来实现这个目标?

在 Internet 上搜索了几个小时无果之后,我有了一个假设,并决定试一试。事实证明,same document 中提到的访问器也可以像左值一样工作,尽管文档中根本没有提到这个特性。下面的代码就好了,和直接操作裸指针一样快

    torch::Tensor tensor = torch::empty({1000, 1000});
    auto accessor = tensor.accessor<float,2>();
    for(int i=0; i < 1000; i++)
    {
        for(int j=0 ; j < 1000; j++)
        {
            accessor[i][j] = calc_tensor_data(i,j);
        }
    }