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