broadcast_tensors
根据 Broadcast 规范对一组输入张量进行广播操作。
本 API 支持两种调用方式:
Paddle 风格:
paddle.broadcast_tensors(input, name=None)使用张量序列作为输入。PyTorch 风格:
paddle.broadcast_tensors(*tensors)使用可变数量的张量参数。
备注
如想了解更多 Broadcasting 内容,请参见 Tensor 介绍 .
下图展示将三个 Tensor 广播到同一维度的过程。三个 Tensor 的尺寸分别为 [4, 1, 3]、[2, 3]、[4, 2, 1],在广播时,会从最后一个维度开始对齐,对于每一个维度,任意两个 Tensor 的在该维度大小相等;或者其中一个 Tensor 的维度等于 1;或者其中一个 Tensor 的维度不存在。
在下图中,
最后一个维度中,Tenser3 取值为 1,Tensor1 和 Tensor2 取值为 3,所有 Tensor 的该维度被扩张为 3;
倒数第二个维度中,Tenser1 取值为 1,Tensor2 和 Tensor3 取值为 2,所有 Tensor 的该维度被扩张为 2;
倒数第三个维度中,Tenser2 为空,Tensor1 和 Tensor3 取值为 4,所有 Tensor 的该维度被扩张为 4。
最终,所有 Tensor 都被扩张到 [4, 2, 3]。
参数
input (list(Tensor)|tuple(Tensor)) - 张量列表或张量元组,数据类型为:
bool、float32、float64、complex64、complex128、int32或int64。所有的输入 Tensor 均需要满足 rank <= 5。name (str,可选) - 具体用法请参见 api_guide_Name,一般无需设置,默认值为
None。
返回
list(Tensor),一组 Broadcast 后的 Tensor,其顺序与 input 一一对应。
代码示例
>>> import paddle
>>> x1 = paddle.rand([1, 2, 3, 4]).astype('float32')
>>> x2 = paddle.rand([1, 2, 1, 4]).astype('float32')
>>> x3 = paddle.rand([1, 1, 3, 1]).astype('float32')
>>> out1, out2, out3 = paddle.broadcast_tensors(input=[x1, x2, x3])
>>> # out1, out2, out3: tensors broadcasted from x1, x2, x3 with shape [1,2,3,4]
