【问题标题】:Convert Matlab to Python, problem with rescaling将 Matlab 转换为 Python,重新缩放的问题
【发布时间】:2021-02-20 02:20:17
【问题描述】:

我正在尝试将以下代码从 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), np.arange(-256/2, 0)]

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

非常感谢您。

【问题讨论】:

    标签: python image matlab numpy porting


    【解决方案1】:

    问题出在下面一行:

    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, 256/2-1), np.arange(-256/2, -1)]) # 2
    
    len([np.arange(0, 256/2-1), np.arange(-256/2, -1)][0]) # 127
    

    如果将第一行更改为:

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

    x 将匹配 MATLAB 中的向量并且子序列将是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2020-02-15
      相关资源
      最近更新 更多