【问题标题】:How do I subtract a value from each element of an array in Lua?如何从 Lua 中数组的每个元素中减去一个值?
【发布时间】:2015-09-08 09:30:15
【问题描述】:

我正在尝试编写一个函数来查找数据集的方差。

我遇到了一个小问题。我有一个数组,我想找出数组中每个元素与平均值的距离。这是我所写内容的简化版本:

>y={1,2,3}
>y_average=2
>y_diff={}

>for key, value in pairs(y) do y_diff[key]=(y[key]-y_average)
>>return unpack(y_diff)
>>end

-1

我想得到什么: -1, 0, 1

为什么它只给我第一个值而不是全部三个?

【问题讨论】:

  • 您的返回将发生在 for 循环的第一次迭代中,并停止循环继续。将return unpack(y_diff) 移到循环的end 之外/下方。
  • 太棒了。非常感谢。

标签: arrays lua


【解决方案1】:

如评论中所述,您的回报打破了第一次迭代中的循环。试试这个:

for  i in ipairs(y) do
    y_diff[i] = y[i] - y_average
end
print( table.concat(y_diff, '\t') )

table.concat 对它可以处理的元素数量没有限制,如果你想将这些元素放在一个文件中而不是一个一个地写入它们,那么你会使用它。

【讨论】:

  • 这看起来确实更好。不过我有几个问题。你为什么写“i,_ in ipairs(y)”而不是“i,v in ipairs(y)”,这是我以前见过的?此外,它认为 table.concat 将不同的表连接在一起。它在这里的作用到底是什么?
  • 如果您在 ipairs 之前谈论下划线,那么当我想丢弃一个值时,这就是我使用的一些变量名(它是一个有效的变量名!)。在这种情况下,它是多余的,因为它是返回的第二个变量。我将编辑我的代码。
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多