1. 维度对其原则
- 步骤
- 从右往左,维度数量向最长的对齐,遇到1跳过,没有则补1
- 例如一些有4维数组shape=(2,3,4,5)和2维数组shape=(4,5)
- 先将维数对齐,第二个数组变成(1,1,4,5)
- 数据维度值对齐, 只将维度值为1的扩充为其对方对应的值
- 例如将(1,1,4,5)中的两个1值扩充为对应的维度值 (2,3,4,5)
- 从右往左,维度数量向最长的对齐,遇到1跳过,没有则补1
示例1
- a.shape=(1,2,3)可以和b.shape=(3,)或者c.shape=(2,3)或者shape=(1,3)的相加
- 但是不能和d.shape=(1,2) 的相加, 因为是步骤1从右往左判断的 a.shape[-1] != d.shape[-1]
示例2
- a.shape=(1,4,5)和b.shape=(8,1,5)可以相加,结果是 shape=(8,4,5)
- 因为步骤2是将维度值为1的扩充成对方的对应值
2. 扩充
- 所谓的扩充就是将数据重复
a = np.array([[1,2,3]])
# 当前a.shape=(1,3)
# 假设 a自动扩充成 (4,3),则数据变成
# [[1 2 3]
# [1 2 3]
# [1 2 3]
# [1 2 3]]
3. 留一个思考题
- 请问 shape=(6,2,3,5)和shape=(2,1,5)的数组是否能够相加呢?