【问题标题】:Best conversion between LuaJIT ffi cdata and torch TensorLuaJIT ffi cdata 和 Torch Tensor 之间的最佳转换
【发布时间】:2016-09-19 09:28:26
【问题描述】:

在 LuaJIT ffi cdata [1] 和 Torch Tensor [2] 之间执行转换的最佳方法是什么。

根据 Mike 在 lua-user 邮件列表 [3] 中的回复,如果我们真的想将 cdata 转换为 lua 普通表,我们必须做一个循环,将每个项目复制到一个新创建的表中。实际上,Torch Tensor 确实为更好的 LuaJIT ffi 访问提供了一些接口 [4]。所以,我目前的解决方案是先做一个循环,然后将 cdata 转换为 lua 普通表,然后调用从表中创建张量的张量构造函数 [5]。

但实际上在我的情况下,我需要非常频繁地在 LuaJIT ffi cdata 和 Torch Tensor 之间进行类似的转换,有没有比循环复制更好的方法?

【问题讨论】:

    标签: type-conversion cdata ffi torch luajit


    【解决方案1】:

    如果您的cdata 代表一个连续的数据数组,那么您可以使用ffi.copy。这是一个玩具示例:

    require 'torch'
    ffi = require 'ffi'
    
    -- create a random float array
    n = 3
    x = torch.rand(n):float()
    cdata = x:data()
    assert(type(cdata) == 'cdata')
    
    -- copy this cdata into a destination tensor
    y = torch.FloatTensor(n)
    ffi.copy(y:data(), cdata, n*ffi.sizeof('float'))
    
    assert(x:equal(y))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2019-11-15
      • 2020-12-12
      • 2020-12-08
      • 2011-06-09
      相关资源
      最近更新 更多