Python中的Matlab's convn

3

我正在将Matlab代码翻译成Python代码,我需要你的帮助了解如何将此行Matlab代码翻译成Python。

Matrix =  convn(Matrix2, ones(x,x,x)/x^3, 'same');

我想问一下,因为在Matlab中conv2没有Python中的直接等价物,所以我不得不使用此处提出的解决方案:Is there a Python equivalent of MATLAB's conv2 function? 他们在这里旋转图像:
def conv2(x, y, mode='same')
return np.rot90(convolve2d(np.rot90(x, 2), np.rot90(y, 2), mode=mode), 

我认为我们也必须做类似的事情,但在三维中实现。因此我请求您的帮助!谢谢!

2
你有查看过 fftconvolve 吗?http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.fftconvolve.html#scipy.signal.fftconvolve - Suever
我尝试在另一个上下文中使用fftconvolve,虽然速度很快,但结果不同(除非像上面的示例一样旋转),并且出现了某种“零伪影”,这些数字接近于零而不是实际的零。由于我在指数中使用了这些值,这导致后来出现了错误。但我会再次查看! - Xavier-rp
有一个具有相同“mode”选项的np.convolve。虽然它可能更像是convconv2 - hpaulj
1个回答

0

嗯,我有两个疯狂的想法。

第一个是我们可以直接在Python中使用MATLAB的“convn”。通过这样做,在Python中打开一个MATLAB服务器,使用“eng = matlab.engine.connect_matlab()”。

现在,我们可以使用属于MATLAB的所有内容。

Matrix = eng.convn(Matrix2, ones(x,x,x)/x^3, 'same')

实际上,我们可以使用此方法在Python中运行整个旧代码,当这些代码以具有小尺寸的矩阵结束时。我们将其转换为“Numpy”:

‘numpyArray =np.array(MATLAB_array,dtype=np.XXX)’。

要小心。如果您的矩阵维度很大,则此转换将很慢。

另一个疯狂的想法是在“Tensorflow”中使用“tf.nn.conv3d”。副作用是间接的。我们必须建立一个会话来运行它:“sess = tf.Session()”。

我不是程序员,但我认为MATLB不愿意被Python取代。如果您在MATLAB中完成了大量工作,则可能很难翻译代码。


考虑使用代码块来改善答案的呈现。 - Thomas Smyth - Treliant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接