将Matlab代码转换为Python

时间:2012-06-25 22:53:50

标签: python arrays matlab numpy

您好我正在尝试将以下代码从Trefethen的MATLAB中的光谱方法转换为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之间进行转换http://www.scipy.org/NumPy_for_Matlab_Users#head-e9a492daa18afcd86e84e07cd2824a9b1b651935我尝试通过以下方式进行转换

data = np.array(v,zeros(nplots,N))

但我收到此错误

 data = np.array(v,zeros(nplots,N));
 TypeError: data type not understood

我认为这是因为numpy arrry有这种结构

  numpy.array(object,dtype=none)

我很感激转换该行的任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

data = [v; zeros(nplots,N)]这是连接两个矩阵并将它们叠加起来,请注意{n}中的;,你可以使用numpy.concatenate((v, zeros((nplots,N))), axis = 0),其中axis是你要通过哪个轴连接... < / p>

data = np.array(v,zeros(nplots,N));
TypeError: data type not understood

基本上当你调用np.array时,第一个参数必须是可迭代的对象,list,tuple和 second 参数必须是类型,即'int','float32','float32 '等等......但你将类型设置为zeros(nplots,N) numpy抱怨它不是一种类型...... numpy.zeros是相同的,第一个参数必须是元组,第二个参数类型,抱歉我没有正确包含()

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