简体   繁体   中英

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

If we have:

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

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

then the code prints:

0 a b
1 aa bb
2 aaa bbb

To iterate over all elements of the two lists, they must have the same size.

Now, if we have the following snippet:

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

where len(dataset) = 1000 and folds = 3, then how does the code works in terms of *k_fold(dataset, folds) ?

EDIT:

I add the reference of the snippet about which my question is, it is line 31 of this code .

Python's enumerate function

Enumeration is used to iterate through an iterable whilst keeping an integer count of the number of iterations, so:

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

Python's zip function

The built-in function zip is used to combine two iterables like so:

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

When zip is provided with iterables of different length, then it returns a zip object with the length of the shortest iterable. So:

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

Python's unpacking operator

Python uses the * to unpack iterables. Looking through the GitHub repository, it seems that k_fold returns a tuple with 3 elements. This is so that they can pass the values that the k_fold function returns into the iterable.

bonus example:

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)

output:

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

not sure about what train_idx, test_idx, val_idx are in the code on github:

train_idx, test_idx val_idx are lists don't know with what they are filled though !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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