2016-05-22 16 views
1

LuaJIT ffd cdata [1]とTorch Tensor [2]の間で変換を実行する最善の方法は何ですか。LuaJIT ffd cdataとtorch Tensorの間の最適な変換

lua-userメールリスト[3]のMikeの返答によると、実際にcdataをluaプレーンテーブルに変換したい場合は、ループを作成して各アイテムを新しい作成済みアイテムにコピーする必要があります。実際、Torch Tensorはより良いLuaJIT ffiアクセスのためのインタフェースを提供しています[4]。だから、私の現在の解決策はループを最初に行い、cdataをluaプレーン・テーブルに変換してから、テーブルからテンソルを作成するテンソル構築関数を呼び出します[5]。

実際、私の場合は、LuaJIT ffi cdataとTorch Tensorの間で同様の変換を頻繁に行う必要があります。ループコピーではなくアプローチがありますか?

答えて

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

ありがとう!それは魅力のように機能します! –