Round Convolution的哪个输出最初是正确的? FFT卷积或scipy信号包装卷积

时间:2018-06-14 19:49:40

标签: python scipy fft

使用“包裹”边界设置通过scipy convolve2d通过FFT VS进行循环卷积得到相同的结果,但是在输出矩阵的不同位置。

这两种方法中最初的位置是正确的(即哪一种方法应该转移以匹配另一种方式)?

        <form id="comments-form" method="POST" action="{{url('/lessons/show/'.$course_id.'/'.$lesson->id.'/comments/'.$lesson_id)}}">

            {{ csrf_field() }}
            <div>
                <textarea rows="10" name="comment" id="comment" placeholder="Comment"></textarea>
            </div>
            <div>
                <input type="submit" name="submit" value="Add Comment">
            </div>
        </form>

        <div id="comments-section">
            @foreach($comments as $comment)
                <div class="comment"> 
                    <p><strong>Name:</strong> {{$user_name}}</p>
                    <p><strong>E-mail:</strong> {{$user_email}}</p>
                    <p><strong>Comment:</strong> {{$comment->comment}}</p>
                </div>
            @endforeach
        </div>

1 个答案:

答案 0 :(得分:1)

取决于坐标原点的位置。 如果是左上角则用fft。 如果它在中心,请进行卷积。

>>> a = (1, 0, 0, 0, 0)
>>> a = np.outer(a, a)
>>> a
array([[1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> np.real(ifft2(fft2(a) * fft2(a)))
array([[1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
>>> 
>>> a = (0, 0, 1, 0, 0)
>>> a = np.outer(a, a)
>>> a
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> scipy.signal.convolve2d(a, a, boundary="wrap", mode="same")
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])