LuaJIT ffi cdata和火炬Tensor之间的最佳转换

时间:2016-05-22 13:37:11

标签: type-conversion cdata ffi torch luajit

在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之间进行类似的转换,是否有更好的方法而不是循环复制?

1 个答案:

答案 0 :(得分:2)

如果您的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))