1

こんにちは私は次のコードを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の間で変換する方法を読んだ後、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

私が推測するのは、numpyarrryがこの構造を持っているからです

  numpy.array(object,dtype=none)

その行を変換するのに助けていただければ幸いです。前もって感謝します!

4

1 に答える 1

2

data = [v; zeros(nplots,N)]これは2つの行列を連結してそれらを積み重ねています。連結したい軸がどこの軸である;かをnumpyで使用できることに注意してください...numpy.concatenate((v, zeros((nplots,N))), axis = 0)

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

基本的に、最初の引数を呼び出すときはnp.array、反復可能なオブジェクト、リスト、タプルである必要があり、2番目の引数はタイプ、つまり「int」、「float32」、「float32」などである必要があります...しかし、タイプを設定するのzeros(nplots,N) numpyは不平ですそれは型ではありません... numpy.zeros同じです最初の引数はタプルでなければならず、2番目の引数は型でなければなりません。申し訳ありませんが、適切に含めていませんでした()

標準タイプであるタイプdata = numpy.concatenate((v, numpy.zeros((nplots,N))), axis = 0) を使用したいと仮定する必要があります。double

于 2012-06-25T23:09:07.737 に答える