0

我需要将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*p22在哪里1x1x3 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大小矩阵。我怎样才能解决这个问题?

4

1 回答 1

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

平铺(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])
于 2015-03-04T14:24:58.017 回答