将Matlab转换为Python,重新缩放问题

问题描述

我正在尝试将以下代码从MATLAB转换为Python:

x = [0:n/2-1,-n/2:-1];
[Y,X] = meshgrid(x,x);
S = (X.^2 + Y.^2)*(2/n)^2;

这是我目前实施的:

x = [np.arange(0,256/2-1),np.arange(-256/2,-1)]
[Y,X] = np.meshgrid(x,x)
S = (X**2 + Y**2)*(2/256)**2

如果我像这样使用它,矩阵的形状为(254,254),但是必须为(256,256)

我还尝试将第一行更改为:

x = [np.arange(0,256/2),0)]

这样我的矩阵大小合适,但是我不认为这是正确的实现,因为生成的图像看起来不正确。

非常感谢您。

解决方法

问题出在以下一行:

x = [np.arange(0,256/2-1),np.arange(-256/2,-1)]

x的最后一个元素是-2,当python初始化一个数组时,它将排除您在第二个参数中指定的值,在这种情况下为-1。最重要的是,x的初始化方式与MATLAB中的向量不同,它将生成一个包含两个元素的列表,第一个索引中包含127个元素的数组。还请注意,python索引从0开始,MATLAB索引从1开始。

len([np.arange(0,-1)]) # 2

len([np.arange(0,-1)][0]) # 127

如果将第一行更改为:

x = np.append(np.arange(0,256/2),0))

x然后将匹配MATLAB中的向量,子序列将是正确的。