gpt4 book ai didi

for-loop - lua中的并行迭代

转载 作者:行者123 更新时间:2023-12-04 23:41:30 24 4
gpt4 key购买 nike

我想在 Lua 中并行遍历多个表。我只能这样做:

for i in range(#table1)
pprint(table1[i])
pprint(table2[i])
end

但我更喜欢 python 的 zip :
for elem1, elem2 in zip(table1, table2):
pprint(elem1)
pprint(elem2)
end

标准 Lua 中是否有这样的东西(或者至少在 Torch 打包的任何东西中?)。

最佳答案

如果你想要 Lua 中类似于 Python 函数的东西,你应该查看 Penlight第一的。对于这种特定情况,有 seq.zip 功能。它seems Penlight 与 Torch 一起安装,但您也可以通过 LuaRocks(同样与至少一个 Torch 发行版捆绑在一起)获得它。

不管怎样,seq.zip Penlight 中的函数仅支持压缩两个序列。这是一个应该更像 Python 的版本 zip ,即允许多于(或少于)两个序列:

local zip
do
local unpack = table.unpack or unpack
local function zip_select( i, var1, ... )
if var1 then
return var1, select( i, var1, ... )
end
end

function zip( ... )
local iterators = { n=select( '#', ... ), ... }
for i = 1, iterators.n do
assert( type( iterators[i] ) == "table",
"you have to wrap the iterators in a table" )
if type( iterators[i][1] ) ~= "number" then
table.insert( iterators[i], 1, -1 )
end
end
return function()
local results = {}
for i = 1, iterators.n do
local it = iterators[i]
it[4], results[i] = zip_select( it[1], it[2]( it[3], it[4] ) )
if it[4] == nil then return nil end
end
return unpack( results, 1, iterators.n )
end
end
end

-- example code (assumes that this file is called "zip.lua"):
local t1 = { 2, 4, 6, 8, 10, 12, 14 }
local t2 = { "a", "b", "c", "d", "e", "f" }
for a, b, c in zip( {ipairs( t1 )}, {ipairs( t2 )}, {io.lines"zip.lua"} ) do
print( a, b, c )
end

关于for-loop - lua中的并行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com