broadcast:
1、能够进行维度扩展,是自动的
2、在扩展的时候不需要拷贝数据
要点:
- 从最小的维度开始匹配,如果前面没有维度了,在前面插入一个新的维度。
- 插入的新维度size是1,再将其扩展为与目标相同大小size。
一个实际案例:
[class, students, scores]
[4, 32, 8 ]
# 有4个班,每个班32个学生,每个学生都有8门课程
由于今年期末考试难度过大,校长决定给每个同学各科成绩加5分
5.0 -> [1]
如果手动操作:[1].unsqueeze(0).unsqueeze(0).expand(4, 32, 8)
# 一个浮点数占用4byte,如果扩张成[4,32,8]的shape需要占用4096byte,broadcast能大大节约内存
注:在最小维度匹配,才能继续扩展