我需要将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
输出img_o
是320x320x3 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 :(得分: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])