解复用器¶
- class torchdata.datapipes.iter.Demultiplexer(datapipe: IterDataPipe, num_instances: int, classifier_fn: Callable[[T_co], Optional[int]], drop_none: bool = False, buffer_size: int = 1000)¶
使用给定的分类函数(函数名:
demux
)将输入 DataPipe 拆分为多个子 DataPipe。此操作将返回子 DataPipe 的列表。
- 参数:
datapipe – 正在过滤的可迭代 DataPipe
num_instances – 要创建的 DataPipe 实例数量
classifier_fn – 一个函数,它将值映射到范围
[0, num_instances - 1]
内的整数或None
drop_none – 默认值为
False
,如果为True
,则函数将跳过分类为None
的元素buffer_size – 这定义了缓冲区在所有子 DataPipe 等待其值被生成时可以容纳的最大输入数量。默认值为
1000
。使用-1
表示无限缓冲区。
示例
>>> # xdoctest: +REQUIRES(module:torchdata) >>> from torchdata.datapipes.iter import IterableWrapper >>> def odd_or_even(n): ... return n % 2 >>> source_dp = IterableWrapper(range(5)) >>> dp1, dp2 = source_dp.demux(num_instances=2, classifier_fn=odd_or_even) >>> list(dp1) [0, 2, 4] >>> list(dp2) [1, 3] >>> # It can also filter out any element that gets `None` from the `classifier_fn` >>> def odd_or_even_no_zero(n): ... return n % 2 if n != 0 else None >>> dp1, dp2 = source_dp.demux(num_instances=2, classifier_fn=odd_or_even_no_zero, drop_none=True) >>> list(dp1) [2, 4] >>> list(dp2) [1, 3]