mirror of
https://github.com/Tencent/ncnn.git
synced 2026-10-18 21:54:39 +08:00
80 lines
1.9 KiB
Markdown
80 lines
1.9 KiB
Markdown
### 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]|
|