Skip to content

Commit 1b80db6

Browse files
committed
fixes #701
1 parent ed34f4b commit 1b80db6

2 files changed

Lines changed: 580 additions & 15 deletions

File tree

fastcore/basics.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,19 @@ def chunked(it, chunk_sz=None, drop_last=False, n_chunks=None):
255255
if res and (len(res)==chunk_sz or not drop_last): yield res
256256
if len(res)<chunk_sz: return
257257

258+
# %% ../nbs/01_basics.ipynb
259+
def chunked(it, chunk_sz=None, drop_last=False, n_chunks=None, pad=False, pad_val=None):
260+
"Return batches from iterator `it` of size `chunk_sz` (or return `n_chunks` total)"
261+
assert bool(chunk_sz) ^ bool(n_chunks)
262+
if n_chunks: chunk_sz = max(math.ceil(len(it)/n_chunks), 1)
263+
if not isinstance(it, Iterator): it = iter(it)
264+
while True:
265+
res = list(itertools.islice(it, chunk_sz))
266+
if res and (len(res)==chunk_sz or not drop_last):
267+
if pad: yield res + [pad_val]*(chunk_sz-len(res))
268+
else: yield res
269+
if len(res)<chunk_sz: return
270+
258271
# %% ../nbs/01_basics.ipynb
259272
def otherwise(x, tst, y):
260273
"`y if tst(x) else x`"

0 commit comments

Comments
 (0)