从matlab转换为python

时间:2013-04-03 12:26:46

标签: python matlab matrix

我需要将matlab文件转换为python。在matlab中我们有

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大小的矩阵。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里有很多问题。

首先,您使用切片而不是索引。它应该与matlab相同,只需将()替换为[]:

img_o[o_indy, o_indx, :]

其次,python使用基于0的索引,而不是像Matlab那样基于1的索引。所以你应该做范围(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),那么

tile(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])