2016-04-08 6 views
1

Lua/Torchの関数として文字列名を評価したいと思います。以下は、私が何をしたいの例です。Lua/Torchで文字列に関数名を指定する方法は?

require 'torch' 

tensorType = torch.getdefaulttensortype() 
print (tensorType) -- Will print "torch.DoubleTensor" 

私の目標は、関数の名前としてtensorTypeに文字列を使用し、フォローのようにその機能を評価することができることです。

tensorType(some arguments) 

でMATLABとPythonには、任意の文字列を実行できる `eval() '関数があります。 Lua/Torchにこのような機能はありますか?

Torch/Luaでどうすればいいですか?

+0

もっと説明してください。関数には名前はありません。とにかく "torch.DoubleTensor"は識別子ではありません。あなたはそれが表現であることを意味しますか? 「トーチ」はグローバル変数ですか? –

+0

@TomBlodget私はあなたが何を意味するのかをはっきりとは理解していませんが、関数が名前を持っていることを知る限り(質問の例のように)。あなたのマシンに "Torch"がインストールされていないと思います。私は正しい? – Amir

+0

とても簡潔で申し訳ありません。関数は、1つ以上の変数によって参照される値です。関数と思われる価値がある場合は、その関数を呼び出そうとすることができます。したがって、その部分は重要ではなくなります。問題は "torch.DoubleTensor"とはどういう意味ですか?あなたのコメントに基づいて、一般的な回答が必要です。これは、識別子、ドット、識別子のように見えます。これは、インデックス(キー)を文字列(第2の識別子)として索引付け操作を実行する式になります。 @lhfはそれをどのように使用するかを示しました.-想定している "トーチ"が範囲内の変数であると仮定すると、それはグローバルであればそうです。 –

答えて

1

loadstringを使用できますが、実行時にコードをコンパイルする必要があるため、一般的には推奨しません。これは何のため?

+0

プログラムの実行中にデータ型を動的に切り替えることができます。 – Amir

+1

@Amir私は分かりませんか? – warspyking

+0

私のプログラムでは、エントリに異なるデータ型のデータが含まれているテーブルがあります。プログラムがデフォルトのデータ型(torch.DoubleTensorなど)で実行されている場合、テーブルのデータをデフォルトのデータ型に変換する必要があります。 – Amir

1

まず、文字列からフィールドの名前を抽出します。次に、関数を呼び出すために名前を使用

k=tensorType:match("%.(.+)$") 

torch[k](some arguments) 
+0

ありがとうございます。しかし、これは私の問題でのみ機能し、一般化することはできません。その名前だけの関数名を呼び出す一般的な方法はありますか? – Amir

1

あなたはまたlutorpyを試みることができる、あなたはLuaのエンジンを持っていますしたがって、あなたは任意のlua/torchライブラリを読み込むことができ、 "lua.eval( 'torch.DoubleTensor(3,4)')でluaコードを実行することができます。詳細については、lutorpyを確認してください。

関連する問題