2013-04-03 65 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])