2016-08-22 3 views
3

Matlab 코드를 Python 코드로 변환하고 있습니다. Matlab에서이 라인을 번역하는 방법을 알고 싶습니다.Matlab 's in Python

: Is there a Python equivalent of MATLAB's conv2 function?

는 그들이 어디에 이미지를 회전 : 매트랩 CONV2은 파이썬에서 직접 해당이없는 내가 솔루션이 여기에 제안 된 사용하려면했기 때문에

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

내가 부탁 해요

def conv2(x, y, mode='same') 
return np.rot90(convolve2d(np.rot90(x, 2), np.rot90(y, 2), mode=mode), 

나는 이렇게 우리가 이와 같은 것을해야한다고 가정하지만, 3D로, 왜 나는 당신의 도움을 요청하고 있습니까!

감사합니다.

+2

'fftconvolve'을 보셨습니까? http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.fftconvolve.html#scipy.signal.fftconvolve – Suever

+0

다른 컨텍스트에서 fftconvolve를 사용하려고했는데 빠르지 만 나에게 위의 예와 같이 회전하지 않는 한 다른 결과와 실제 0 대신 0에 가까운 숫자 인 "제로 인공물"이 있습니다. 이것은 지수 값에서이 값을 사용했기 때문에 나중에 오류가 발생했습니다. 하지만 다시 볼게! –

+0

'mode' 옵션과 동일한'np.convolve'가 있습니다. 그것은 'conv' 또는'conv2'와 더 비슷할지라도. – hpaulj

답변

0

음, 두 가지 미친 아이디어가 있습니다.

우리는 파이썬에서 MATLAB의 'convn'을 직접 사용할 수 있습니다. 이렇게하면 Python에서 'eng = matlab.engine.connect_matlab()'를 사용하여 MATLAB 서버를 열 수 있습니다.

이제 MATLAB에 속한 모든 것을 사용할 수 있습니다.

매트릭스 = eng.convn (행렬 2, 사람 (X, X, X)/X^3, '동일')

사실, 우리는이 방법으로 파이썬에서 전체 예전의 코드를 실행할 수 있습니다 때 이러한 코드는 작은 치수의 행렬로 끝납니다.

'numpyArray = np.array (MATLAB_array, dtype = np.XXX)'로 'Numpy'로 번역합니다.

신중히 작성하십시오. 행렬의 크기가 큰 경우이 변환이 느려집니다.

또 다른 미친 아이디어는 'Tensorflow'에서 'tf.nn.conv3d'를 사용하는 것입니다. 부작용은 간접적입니다. 'sess = tf.Session()'을 사용하여 세션을 실행해야합니다.

저는 프로그래머가 아니지만 MATLB가 Python으로 대체되지 않을 것이라고 생각합니다. MATLAB에서 많은 작업을 수행했다면 코드를 번역하기가 어려울 수 있습니다.

+0

코드 블록을 사용하여이 대답의 표현을 향상시키는 것을 고려하십시오. –