binaryop broadcasting

broadcasting rule

ncnn BinaryOp accepts blobs with different shape

C = BinaryOp(A, B)

shape notation convention is [w], [w,h], [w,h,c]

type A B C
1 [1] scalar [1]
2 [1] [2] [2]
3 [1] [2,3] [2,3]
4 [1] [2,3,4] [2,3,4]
5 [2] scalar [2]
6 [2] [1] [2]
7 [2] [2] [2]
8 [3] [2,3] [2,3]
9 [4] [2,3,4] [2,3,4]
10 [2,3] scalar [2,3]
11 [2,3] [1] [2,3]
12 [2,3] [3] [2,3]
13 [2,3] [2,3] [2,3]
14 [3,4] [2,3,4] [2,3,4]
15 [2,3,4] scalar [2,3,4]
16 [2,3,4] [1] [2,3,4]
17 [2,3,4] [4] [2,3,4]
18 [2,3,4] [3,4] [2,3,4]
19 [2,3,4] [2,3,4] [2,3,4]

some special broadcasting rule exists for model compatibility

special type A B C
1 [2,3,4] [1,1,4] [2,3,4]
2 [2,3,4] [2,3,1] [2,3,4]
3 [1,1,4] [2,3,4] [2,3,4]
4 [2,3,1] [2,3,4] [2,3,4]
5 [2,3,4] [1,3,4] [2,3,4]
6 [2,3,4] [2,1,4] [2,3,4]
7 [1,3,4] [2,3,4] [2,3,4]
8 [2,1,4] [2,3,4] [2,3,4]