【问题标题】:Matlab's convn in PythonPython中的Matlab转换
【发布时间】:2016-12-29 06:31:49
【问题描述】:

我正在将 Matlab 代码翻译成 Python 代码,我需要您的帮助来了解如何在 Matlab 中翻译这行代码。

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), 

因此,我假设我们也必须做类似的事情,但在 3D 中,因此我请求您的帮助!

谢谢!

【问题讨论】:

  • 你查看fftconvolve了吗? docs.scipy.org/doc/scipy/reference/generated/…
  • 我尝试在另一个上下文中使用 fftconvolve,虽然它很快,但给了我不同的结果(除非像上面的例子那样旋转)和某种“零伪影”,这些数字接近零而不是实际的零。这导致了后来的错误,因为我在指数中使用了这些值。不过我会再看一遍!
  • 有一个np.convolve 具有相同的mode 选项。虽然它可能更像convconv2

标签: python matlab numpy scipy


【解决方案1】:

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

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

现在,我们可以使用所有属于 MATLAB 的东西了。

Matrix = eng.convn(Matrix2, one(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 中进行了大量工作,则可能很难翻译代码。

【讨论】:

  • 考虑使用代码块来改进这个答案的呈现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2015-11-01
  • 2017-12-12
  • 2020-02-15
  • 1970-01-01
  • 2021-01-15
  • 2014-01-23
相关资源
最近更新 更多