|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- ### broadcasting rule
-
- ncnn BinaryOp accepts blobs with different shape
-
- C = BinaryOp(A, B)
-
- shape notation convention is [w], [w,h], [w,h,c], [w,h,d,c]
-
- * binaryop with scalar and scalar-like
-
- |A|B|C|
- |---|---|---|
- |[2]|scalar / [1]|[2]|
- |[2,3]|scalar / [1] / [1,1]|[2,3]|
- |[2,3,4]|scalar / [1] / [1,1] / [1,1,1]|[2,3,4]|
- |[2,3,4,5]|scalar / [1] / [1,1] / [1,1,1] / [1,1,1,1]|[2,3,4,5]|
-
- * no broadcast
-
- |A|B|C|
- |---|---|---|
- |[2]|[2]|[2]|
- |[2,3]|[2,3]|[2,3]|
- |[2,3,4]|[2,3,4]|[2,3,4]|
- |[2,3,4,5]|[2,3,4,5]|[2,3,4,5]|
-
- * explicit broadcast B
-
- |A|B|C|
- |---|---|---|
- |[2,3]|[1,3]|[2,3]|
- |[2,3]|[2,1]|[2,3]|
- |[2,3,4]|[1,3,4]|[2,3,4]|
- |[2,3,4]|[2,1,4]|[2,3,4]|
- |[2,3,4]|[2,3,1]|[2,3,4]|
- |[2,3,4]|[1,1,4]|[2,3,4]|
- |[2,3,4]|[1,3,1]|[2,3,4]|
- |[2,3,4]|[2,1,1]|[2,3,4]|
- |[2,3,4,5]|[1,3,4,5]|[2,3,4,5]|
- |[2,3,4,5]|[2,1,4,5]|[2,3,4,5]|
- |[2,3,4,5]|[2,3,1,5]|[2,3,4,5]|
- |[2,3,4,5]|[2,3,4,1]|[2,3,4,5]|
- |[2,3,4,5]|[1,1,4,5]|[2,3,4,5]|
- |[2,3,4,5]|[1,3,1,5]|[2,3,4,5]|
- |[2,3,4,5]|[1,3,4,1]|[2,3,4,5]|
- |[2,3,4,5]|[2,1,1,5]|[2,3,4,5]|
- |[2,3,4,5]|[2,1,4,1]|[2,3,4,5]|
- |[2,3,4,5]|[2,3,1,1]|[2,3,4,5]|
- |[2,3,4,5]|[1,1,1,5]|[2,3,4,5]|
- |[2,3,4,5]|[1,1,4,1]|[2,3,4,5]|
- |[2,3,4,5]|[1,3,1,1]|[2,3,4,5]|
- |[2,3,4,5]|[2,1,1,1]|[2,3,4,5]|
-
- * implicit broadcast B for inner axis
-
- It broadcasts in the opposite direction of the numpy's implicit broadcasting behavior.
-
- pnnx will insert reshape operator at the appropriate position to convert it to explicit broadcast automatically.
-
- |A|B|C|
- |---|---|---|
- |[2,3]|[3]|[2,3]|
- |[2,3,4]|[4]|[2,3,4]|
- |[2,3,4]|[3,4]|[2,3,4]|
- |[2,3,4,5]|[5]|[2,3,4,5]|
- |[2,3,4,5]|[4,5]|[2,3,4,5]|
- |[2,3,4,5]|[3,4,5]|[2,3,4,5]|
-
- * implicit broadcast B with 1 dimension rank for outer axis
-
- This exists only for compatibility.
-
- When the size is the same, eg. [2,2] and [2], broadcast B for inner axis will be prioritized.
-
- |A|B|C|
- |---|---|---|
- |[2,3]|[2]|[2,3]|
- |[2,3,4]|[2]|[2,3,4]|
- |[2,3,4,5]|[2]|[2,3,4,5]|
|