Это дополнительный вопрос этот вопрос .
Согласно документации ,
len(output) = len(input) + len(kernel) - 1
Итак, я разобрался
В случае conv(u,v,"full")
:
len(pad) = len(kernel) - 1
Например, согласно командной строке Matlab:
u = [1 2 1 3]
v = [2 0 1]
w = [2 4 3 8 1 3]
Coz,
len(w) = len(u) + len(v) - 1
= 4 + 3 - 1
= 6
len(pad) = len(v) - 1
= 3 - 1
= 2
Итак, согласно расчету:
0 0 1 2 1 3 0 0
1 0 2
---------------
0 0 2 = 2
. . . . . .
. . . . . .
0 0 1 2 1 3 0 0
1 0 2
-------------------
3 0 0 = 3
В случае conv(u,v,"same")
:
u = [1 2 1 3]
v = [2 0 1]
w = [4 3 8 1]
Coz,
len(w) = len(u)
= 4
len(pad) = floor(len(v) / 2)
= floor(3 / 2)
= 1
Итак, согласно расчету:
0 1 2 1 3 0
1 0 2
-----------
0 0 4 = 4
. . . . . .
. . . . . .
0 1 2 1 3 0
1 0 2
---------------
1 0 0 = 1
Но проблема возникает в случае следующего примера:
u = [1 2 1 3 1]
v = [2 0 1 0]
Следующий в порядке:
В случае conv(u,v,"full")
:
w = [2 4 3 8 3 3 1 0]
len(w) = len(u) + len(v) - 1
= 5 + 4 - 1
= 8
len(pad) = len(v) - 1
= 4 - 1
= 3
Итак,
0 0 0 1 2 1 3 1 0 0 0
0 1 0 2
---------------------
0 0 0 2 = 2
. . . . .
. . . . .
0 0 0 1 2 1 3 1 0 0 0
0 1 0 2
---------------------------
0 0 0 0 = 0
Но, у следующего есть проблемы:
Coz,
len(w) = len(u)
= 5
len(pad) = floor(len(v) / 2)
= floor(4 / 2)
= 2
Итак, согласно расчету:
0 0 1 2 1 3 1 0 0
0 1 0 2
---------------
0 0 0 4 = 4
0 0 1 2 1 3 1 0 0
0 1 0 2
---------------
0 1 0 2 = 3
0 0 1 2 1 3 1 0 0
0 1 0 2
---------------
0 2 0 6 = 8
0 0 1 2 1 3 1 0 0
0 1 0 2
-----------------
0 1 0 2 = 3
0 0 1 2 1 3 1 0 0
0 1 0 2
-------------------
0 3 0 0 = 3
0 0 1 2 1 3 1 0 0
0 1 0 2
-------------------
0 1 0 0 = 1
т.е. output = [4 3 8 3 3 1]
, что не соответствует выходу Matlab.
Что здесь происходит?