簡體   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