2017-07-22 2 views
1

ファイルから数値をインポートして、特定の値に変更しようとしました。私はトーチを使用してgestureの値を取得し、101から10または100から9に変更します(入力が対応する数値(10または9)の場合)。残念ながら、私はLuaでは、入力が整数に変換することはできず、整数やトーチのテンソルと比較しないタイプのuserdataであることを認識しました。ルア:数値としてのユーザーデータの読み取り/数値とのユーザーデータの比較

私の質問は次のとおりです。入力の種類がuserdataの場合、数値の等しいかどうかを確認するにはどうすればよいですか?

比較が可能なように入力を数値に変換する方法はありますか?

gesture = matio.load(val, 'gesture') 

print(type(gesture)) --prints `userdata` 
print(gesture)  --prints 10 (for example) 
if gesture == th.FloatTensor({101}) then 
    gesture = th.FloatTensor({10}) 
    print("101 Detected! New value is: ") 
    print(gesture) 
    os.exit(0) 
elseif gesture == th.FloatTensor({100}) then 
    gesture = th.FloatTensor({9}) 
    print("100 Detected! New value is: ") 
    print(gesture) 
    os.exit(0) 
end 
+0

おそらく、そのユーザーデータにはメンバー関数があります。これらのメンバーの1人は整数を生成しませんか? –

+0

@NicolBolasはすばらしいコメントをいただきありがとうございます! :)前に 'lua userdataメンバ関数'を検索しましたが、役に立たないものは見当たりませんでした。 – DaveTheAl

+0

あなたは誤解しています。そのユーザーデータは、いくつかのC APIに由来しています。そのユーザーデータを使用する方法については、そのAPIのドキュメントを参照してください。ユーザーデータのための単一のAPIはありません。すべてのC APIは、さまざまなユーザーデータオブジェクトに対して異なる機能を公開しています。 –

答えて

1

これはかなり複雑な問題ですが、難しい方法でテストした結果、ユーザーデータの数値と整数を比較する方法が見つかりました。

gesture_int = tonumber(tostring(gesture)) 

この新しい変数は整数としてユーザーデータ数を記憶し、次のように

print(type(gesture)) -> prints `userdata` 
print(gesture) -> 10 
gesture_str = tostring(gesture) 
print(type(gesture_str)) -> prints `string` 
gesture_int = tonumber(gesture_str) 
print(type(gesture_int)) -> prints `number` 

シングルライン溶液です。

関連する問題