2013-04-03 111 views
0

我需要轉換一個matlab文件python.In MATLAB我們轉換到Python

for o_indy = 1:o_vres 
    for o_indx = 1:o_hres 
    .... 
    if(condition) 
    img_o(o_indy, o_indx,:) = pix11*p11 + pix12*p12 + pix21*p21 + pix22*p22; 

其中pix11*p11 , pix12*p12 , pix21*p21 , pix22*p221x1x3 matrices

在MATLAB輸出img_o320x320x3 matrix

當我轉換爲python

for o_indy in range(1, o_vres+1): 
    for o_indx in range(1, o_hres+1): 
.... 
     if(condition): 
     img_o[o_indy-1: o_indx] =(matrix((array(pix11)*p11))+matrix((array(pix12)*p12))+matrix((array(pix21)*p21))+matrix((array(pix22)*p22))) 

我收到了1x320x960大小的矩陣。 我該如何解決這個問題?

+0

如果還沒有看到它已經,這可能會幫助您:http://www.scipy.org/NumPy_for_Matlab_Users也不是'img_o [o_indy-1:o_indx]'缺少一個逗號的地方? – Dan

+0

「pix11」和「p11」的形狀是什麼?如何初始化'img_o'?它有什麼形狀? – unutbu

+0

pix11是'1x1x3矩陣','p11'是一個常量。 'img_o'初始化爲'img_o = tile(temp_fill_value,osize)',其中'temp_fill_value = array(fill_value)'和'fill_value = [[[0,0 0]]]'.'size'是要轉換的圖像 – diva

回答

0

這裏有很多問題。

首先,您正在使用切片而不是索引。它應該是相同的matlab,只需用()用[]代替:

img_o[o_indy, o_indx, :] 

其次,Python使用基於0的索引,而不是基於1的索引像Matlab。所以你應該做範圍(o_vres),例如。

第三,你真的不應該使用矩陣。

那麼你的代碼看起來應該是這樣的:

pix11=array(pix11) 
pix12=array(pix12) 
pix13=array(pix13) 
for o_indy in range(o_vres): 
    for o_indx in range(o_hres): 
.... 
     if(condition): 
     img_o[o_indy, o_indx, :] = pix11*p11+pix12*p12+pix2*p21+pix22*p22 

還擁有你如何你是多麼貼磚的問題。如果osize的長度爲2,那麼結果數組將是錯誤的。所以說osize是(320,320),然後

瓦(temp_fill_value,osize)

將導致形狀的陣列(1,320,960)

所以你需要osize有的3長度,與最後一個值是1。因此,說:

img_o = tile(temp_fill_value, [osize[0], osize[1], 1]) 

這導致形狀的陣列(320,320,3)

然而,簡單的解決方案僅僅是:

img_o = np.zeros([osize[0], osize[1], 3])