【问题标题】:MATLAB to Python Conversion ArraysMATLAB 到 Python 转换数组
【发布时间】:2016-01-22 07:09:29
【问题描述】:

我在 MATLAB 中有一些代码正在尝试转换为 python。我对python知之甚少,所以这有点挑战。

这是 MATLAB 代码:

xm_row = -(Nx-1)/2.0+0.5:(Nx-1)/2.0-0.5;
xm = xm_row(ones(Ny-1, 1), :);
ym_col = (-(Ny-1)/2.0+0.5:(Ny-1)/2.0-0.5)';  
ym = ym_col(:,ones(Nx-1,1));

这是我在 python 中尝试做同样事情的非常粗略的尝试:

 for x in range (L-1):
     for y in range (L-1):
         xm_row = x[((x-1)/2.0+0.5):((x-1)/2.0-.5)]
         xm = xm_row[(ones(y-1,1)),:]
         ym_column = transposey[(-(y-1)/2.0+0.5):((y-1)/2.0-.5)]
         ym = ym_column[:,ones(x-1,1)]

在我的 python 代码中,L 是我循环遍历的数组的大小。 当我尝试在 python 中运行它时,出现错误:

 'int' object has no attribute '__getitem__' 

在线:

 xm_row = x[((x-1)/2.0+0.5):((x-1)/2.0-.5)]

感谢任何帮助!

【问题讨论】:

  • x 是整数 - 列表中的第一个值 0..L-1
  • x[ ... ] - 这样你就认为x 是一个列表(数组),但x 是单个数字。

标签: python arrays matlab


【解决方案1】:

在 MATLAB 中,您可以使用 meshgrid 以更简单的方式实现它,就像这样 -

Nx = 5;
Ny = 7;

xm_row = -(Nx-1)/2.0+0.5:(Nx-1)/2.0-0.5;
ym_col = (-(Ny-1)/2.0+0.5:(Ny-1)/2.0-0.5)';  
[xm_out,ym_out] = meshgrid(xm_row,ym_col)

我们来对比一下这个meshgrid版本和原代码进行验证-

>> Nx = 5;
>> Ny = 7;
>> xm_row = -(Nx-1)/2.0+0.5:(Nx-1)/2.0-0.5;
>> ym_col = (-(Ny-1)/2.0+0.5:(Ny-1)/2.0-0.5)'; 
>> xm = xm_row(ones(Ny-1, 1), :)
xm =
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
>> ym = ym_col(:,ones(Nx-1,1))
ym =
         -2.5         -2.5         -2.5         -2.5
         -1.5         -1.5         -1.5         -1.5
         -0.5         -0.5         -0.5         -0.5
          0.5          0.5          0.5          0.5
          1.5          1.5          1.5          1.5
          2.5          2.5          2.5          2.5
>> [xm_out,ym_out] = meshgrid(xm_row,ym_col)
xm_out =
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
         -1.5         -0.5          0.5          1.5
ym_out =
         -2.5         -2.5         -2.5         -2.5
         -1.5         -1.5         -1.5         -1.5
         -0.5         -0.5         -0.5         -0.5
          0.5          0.5          0.5          0.5
          1.5          1.5          1.5          1.5
          2.5          2.5          2.5          2.5

现在,从 MATLAB 到 Python 的转换在 NumPy 中有一个更简单的媒介,因为它托管了许多来自 MATLAB 的对应物以在 Python 环境中使用。对于我们的案例,我们有一个 NumPy 版本的 meshgrid,这使得它只是一个直接的移植,如下所示 -

import numpy as np # Import NumPy module

Nx = 5;
Ny = 7;

# Use np.arange that is a colon counterpart in NumPy/Python
xm_row = np.arange(-(Nx-1)/2.0+0.5,(Nx-1)/2.0-0.5+1)
ym_col = np.arange(-(Ny-1)/2.0+0.5,(Ny-1)/2.0-0.5+1)

# Use meshgrid just like in MATLAB
xm,ym = np.meshgrid(xm_row,ym_col)

输出 -

In [28]: xm
Out[28]: 
array([[-1.5, -0.5,  0.5,  1.5],
       [-1.5, -0.5,  0.5,  1.5],
       [-1.5, -0.5,  0.5,  1.5],
       [-1.5, -0.5,  0.5,  1.5],
       [-1.5, -0.5,  0.5,  1.5],
       [-1.5, -0.5,  0.5,  1.5]])

In [29]: ym
Out[29]: 
array([[-2.5, -2.5, -2.5, -2.5],
       [-1.5, -1.5, -1.5, -1.5],
       [-0.5, -0.5, -0.5, -0.5],
       [ 0.5,  0.5,  0.5,  0.5],
       [ 1.5,  1.5,  1.5,  1.5],
       [ 2.5,  2.5,  2.5,  2.5]])

另外,请注意+1 在这两种情况下都被添加到np.arange 的第二个参数的末尾,因为np.arange 在创建元素范围时排除了第二个参数元素。例如,如果我们要创建从310 的一系列元素,我们将需要执行np.arange(3,10+1),如下所示 -

In [32]: np.arange(3,10+1)
Out[32]: array([ 3,  4,  5,  6,  7,  8,  9, 10])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2019-10-01
    • 2010-11-03
    • 2019-05-06
    • 2012-07-25
    • 2016-08-19
    • 2021-01-12
    相关资源
    最近更新 更多