2016-05-22 2 views
1

Quelle est la meilleure façon d'effectuer la conversion entre LuaJIT ffi cdata [1] et Torch Tensor [2]. Selon la réponse de Mike dans lua-user mail list [3], si nous voulons vraiment convertir cdata en lua plain table, nous devons faire une boucle pour copier chaque élément à un nouveau créé. Et en fait Torch Tensor fournit une interface pour un meilleur accès à LuaJIT ffi [4]. Donc, ma solution actuelle est de faire une boucle d'abord et de convertir le cdata en une table plain lua, puis d'appeler la fonction de construction tensorielle qui crée un tenseur à partir d'une table [5].Meilleure conversion entre LuaJIT ffi cdata et torche Tensor

Mais en fait dans mon cas, j'ai besoin de faire une conversion similaire entre LuaJIT ffi cdata et Torch Tensor très fréquemment, y at-il une meilleure approche plutôt que la copie en boucle?

Répondre

2

Si votre cdata représente un tableau contigu de données, vous pouvez utiliser ffi.copy. Voici un exemple de jouet:

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)) 
+0

Merci! Il fonctionne comme un charme! –