繁体   English   中英

enumerate(zip(*k_fold(dataset, folds))) 如何工作?

[英]How does enumerate(zip(*k_fold(dataset, folds))) work?

如果我们有:

a = ['a', 'aa', 'aaa']
b = ['b', 'bb', 'bbb']

for i, (x, y) in enumerate(zip(a, b)):
    print (i, x, y)

然后代码打印:

0 a b
1 aa bb
2 aaa bbb

要遍历两个列表的所有元素,它们必须具有相同的大小。

现在,如果我们有以下代码段:

for fold, (train_idx, test_idx, val_idx) in enumerate(zip(*k_fold(dataset, folds))):
    pass

其中len(dataset) = 1000 和folds = 3,那么代码在*k_fold(dataset, folds)方面是如何工作的?

编辑:

我添加了我的问题所在的片段的引用,它是此代码的第 31 行。

Python的enumerate函数

枚举用于遍历一个可迭代对象,同时保持迭代次数的整数计数,因此:

>>> for number, value in enumerate(["a", "b", "c"]):
...     print(number, value)
1 a
2 b
3 c

Python 的zip函数

内置函数zip用于组合两个可迭代对象,如下所示:

>>> a = [1, 2]
>>> b = [3, 4]
>>> list(zip(a, b))
[(1, 3), (2, 4)]

zip提供不同长度的可迭代对象时,它会返回一个具有最短可迭代对象长度的zip对象。 所以:

>>> a = [1, 2, 5, 6]
>>> b = [3, 4]
>>> list(zip(a, b))
[(1, 3), (2, 4)]

Python 的解包操作符

Python 使用*来解压可迭代对象。 查看 GitHub 存储库,似乎k_fold返回了一个包含 3 个元素的元组。 这样他们就可以将k_fold函数返回的值传递给可迭代对象。

奖金示例:

a = [1, 2, 5, 6, 8, 9, 10 , 11]
b = [3, 4, 12, 13 ]
c = [ 14, 15 ]
for i in enumerate(zip(a, b, c)):
    print(i)

输出:

(0, (1, 3, 14))
(1, (2, 4, 15))   -----> like they are fold, (train_idx, test_idx, val_idx) 

不确定 github 上的代码中的 train_idx、test_idx、val_idx 是什么:

train_idx, test_idx val_idx 是列表,但不知道它们填充了什么!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM