15

SciPy と Numpy を使用して 2D 行列の畳み込みを実行しようとしましたが、失敗しました。私が試したSciPyの場合、Numpyの場合はsepfir2dとscipy.signal.convolveとConvolve2Dです。Python の Matlab に conv2 のような単純な関数はありますか?

次に例を示します。

 A= [ 5     4     5     4;
      3     2     3     2;
      5     4     5     4;
      3     2     3     2 ]

畳み込みたい[0.707 0.707]

そして、Matlabのconv2による結果は

3.5350    6.3630    6.3630    6.3630    2.8280
2.1210    3.5350    3.5350    3.5350    1.4140
3.5350    6.3630    6.3630    6.3630    2.8280
2.1210    3.5350    3.5350    3.5350    1.4140

Pythonでこの出力を計算する関数はありますか? 私は応答に感謝します。

4

3 に答える 3

5

scipy の convolved1d() は、必要なことを行います。エッジの扱いが少し異なります。

sp.ndimage.filters.convolve1d(A,[0.707,0.707],axis=1,mode='constant')

あなたに与える:

array([[ 6.363,  6.363,  6.363,  2.828],
       [ 3.535,  3.535,  3.535,  1.414],
       [ 6.363,  6.363,  6.363,  2.828],
       [ 3.535,  3.535,  3.535,  1.414]])

まったく同じ結果が必要な場合は、次のように A にゼロの列を追加するだけです。

sp.ndimage.filters.convolve1d(np.c_[np.zeros((4,1)),A],[0.707,0.707],axis=1,mode='constant')

そしてあなたは得るでしょう:

array([[ 3.535,  6.363,  6.363,  6.363,  2.828],
       [ 2.121,  3.535,  3.535,  3.535,  1.414],
       [ 3.535,  6.363,  6.363,  6.363,  2.828],
       [ 2.121,  3.535,  3.535,  3.535,  1.414]])

私の経験から、Matlab で行うことのほとんど (およびそれ以上) を scipy/numpy で行うことができます。

于 2013-04-20T15:14:22.733 に答える