将Matlab代码转换为Python

将Matlab代码转换为Python,python,arrays,matlab,numpy,Python,Arrays,Matlab,Numpy,您好,我正在尝试将以下代码从MATLAB中Trefethen的光谱方法转换为Python % p6.m - variable coefficient wave equation % Grid, variable coefficient, and initial data: N = 128; h = 2*pi/N; x = h*(1:N); t = 0; dt = h/4; c = .2 + sin(x-1).^2; v = exp(-100*(x-1).^2); vold = ex

您好,我正在尝试将以下代码从MATLAB中Trefethen的光谱方法转换为Python

% p6.m - variable coefficient wave equation

% Grid, variable coefficient, and initial data:
  N = 128; h = 2*pi/N; x = h*(1:N); t = 0; dt = h/4;
  c = .2 + sin(x-1).^2;
  v = exp(-100*(x-1).^2); vold = exp(-100*(x-.2*dt-1).^2);

% Time-stepping by leap frog formula:
  tmax = 8; tplot = .15; clf, drawnow, set(gcf,'renderer','zbuffer')
  plotgap = round(tplot/dt); dt = tplot/plotgap;
  nplots = round(tmax/tplot);
  data = [v; zeros(nplots,N)]; tdata = t;
  for i = 1:nplots
    for n = 1:plotgap
      t = t+dt;
      v_hat = fft(v);
      w_hat = 1i*[0:N/2-1 0 -N/2+1:-1] .* v_hat;
      w = real(ifft(w_hat)); 
      vnew = vold - 2*dt*c.*w; vold = v; v = vnew;
    end
    data(i+1,:) = v; tdata = [tdata; t];
  end
  waterfall(x,tdata,data), view(10,70), colormap(1e-6*[1 1 1]);
  axis([0 2*pi 0 tmax 0 5]), ylabel t, zlabel u, grid off
除了这一行代码外,大多数情况下都进展顺利

 data = [v; zeros(nplots,N)]
在阅读了如何在Numpy和Matlab之间进行转换之后,我尝试通过以下操作进行转换

data = np.array(v,zeros(nplots,N))
但是我得到了这个错误

 data = np.array(v,zeros(nplots,N));
 TypeError: data type not understood
我想这是因为一个小矮人有这样的结构

  numpy.array(object,dtype=none)
如果您能帮我转换这条线路,我将不胜感激。提前谢谢你

data=[v;zero(nplots,N)]
这是将两个矩阵串联起来并叠加起来,注意
在numpy中,可以使用
numpy.concatenate((v,零((nplots,N))),axis=0)
其中axis是要通过哪个轴连接的轴

data = np.array(v,zeros(nplots,N));
TypeError: data type not understood
基本上,当您调用
np.array
时,第一个参数必须是iterable object、list、tuple,第二个参数的类型必须是ie'int'、'float32'、'float32'等等。。。但是您将类型设置为
零(nplots,N)
numpy
正在抱怨它不是一个类型。。。
numpy.zeros
是相同的,第一个参数必须是元组,第二个参数必须是类型,很抱歉我没有正确地包含
()


它应该是
data=numpy.concatenate((v,numpy.zeros((nplots,N))),axis=0)
假设您想使用标准类型
double
类型。

可能
np.vstack((v,zeros(nplots,N))
@JBernardo谢谢您的回复。我尝试了vstack,但仍然得到
TypeError:data type not knowledged
error检查参数数。。。一定有比平常更多的:)相关:,谢谢你的回复。我尝试了连接,但仍然出现错误