Adh*_*ali 2 python matlab slice multidimensional-array
我有matlab数组操作如下:
[M,N]=size(I) ;
J = zeros(2*M,2*N) ;
J(1:2:end,1:2:end) = I ;
J(2:2:end-1,2:2:end-1) = 0.25*I(1:end-1,1:end-1) + 0.25*I(2:end,1:end-1) + 0.25*I(1:end-1,2:end) + 0.25*I(2:end,2:end) ;
J(2:2:end-1,1:2:end) = 0.5*I(1:end-1,:) + 0.5*I(2:end,:) ;
J(1:2:end,2:2:end-1) = 0.5*I(:,1:end-1) + 0.5*I(:,2:end) ;
Run Code Online (Sandbox Code Playgroud)
我试图在python中重写相同的操作,我想出了以下内容:
J=numpy.zeros((2*M,2*N))
J[::2,::2] = I ;
J[2:-1:2,2:-1:2] = 0.25*I[1::-1,1::-1] + 0.25*I[2::,1::-1] + 0.25*I[1::-1,2::] + 0.25*I[2::,2::]
J[2:-1:2,1::2] = 0.5*I[1::-1,] + 0.5*I[2::,]
J[::2,2:-1:2] = 0.5*I[:,1::-1] + 0.5*I[:,2::]
Run Code Online (Sandbox Code Playgroud)
但是python代码给了我不同的结果.
谁能告诉我有什么问题?
谢谢,
逐一完成这一过程表明你的范围有一些错误.我认为你在python中误解了一些关于数组的东西.
array[1],在python中,数组的第一个元素是array[0]. array[start:stop:step],所以要从数组中的第五个元素开始的每个第二个元素到达结束array[4::2].只要仔细阅读,您就会发现问题.例如,第二个等式右边的第一个元素应该是:
0.25*I[0:-1, 0:-1]
Run Code Online (Sandbox Code Playgroud)
请注意,此处不需要第二个冒号,因为您的step值为1,如果您想要更改步骤,则步骤最后一步.
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |