【问题标题】:How invoke a function given its name in string in Lua/Torch?如何在 Lua/Torch 中以字符串形式调用函数?
【发布时间】:2016-07-30 07:44:39
【问题描述】:

我想将字符串名称评估为 Lua/Torch 中的函数。下面是我想做的一个例子:

require 'torch'

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

我的目标是能够使用tensorType 中的字符串作为函数的名称,并像下面这样评估该函数:

tensorType(some arguments)

在 MATLAB 和 Python 中有一个可以执行任意字符串的 `eval()' 函数。 Lua/Torch中有这样的功能吗?

如何在 Torch/Lua 中做到这一点?

【问题讨论】:

  • 请多解释。函数没有名称。无论如何,“torch.DoubleTensor”不是标识符。你的意思是它是一种表达方式吗? “火炬”会是一个全局变量吗?
  • @TomBlodget 我不清楚你的意思,但据我所知,函数有名称(如问题中给出的示例)。我认为您的机器上没有安装“Torch”。我说的对吗?
  • 抱歉这么简洁。函数是由一个或多个变量引用的值。如果你有一个你认为是函数的值,你可以尝试调用它。所以,那部分变得不重要了。问题是“torch.DoubleTensor”是什么意思。根据您的 cmets,您需要一个一般性的答案。它看起来像一个标识符,点,标识符。这可能是使用索引(键)作为字符串(第二个标识符)执行索引操作的表达式。 @lhf 展示了如何使用它——假设“torch”是一个范围内的变量,如果它是一个全局变量,那就是。

标签: python matlab lua eval torch


【解决方案1】:

你也可以试试lutorpy,你会在 python 中拥有一个 lua 引擎,因此,你可以加载任何 lua/torch 库,并且你可以使用 "lua.eval('torch.DoubleTensor(3, 4)')”。更多详情请查看lutorpy

【讨论】:

    【解决方案2】:

    先从字符串中提取字段名:

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

    然后用名字调用函数:

    torch[k](some arguments)
    

    【讨论】:

    • 谢谢。但这仅适用于我的问题并且不可推广。有没有什么通用的方法来调用一个只给它名字的函数名?
    【解决方案3】:

    您可以使用loadstring,但通常不建议这样做,因为它必须在运行时编译代码。这是干什么用的?

    【讨论】:

    • 我希望能够在程序运行时在数据类型之间动态切换。
    • @Amir 我不明白?
    • 所以在我的程序中,我有一个表,其条目包括来自不同数据类型的数据。当程序使用一些默认数据类型(例如torch.DoubleTensor)运行时,我需要将表中的数据转换为默认数据类型。
    • @Amir 您希望如何转换它们?你要转换什么数据类型?
    • 它们是浮点型、双精度型和整数型。
    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多