2

3 次元グリッドを返す関数を定義しています。その間に、2 次元配列を返す、既に定義されている関数を使用します。反復中にこれらの 2 次元配列を結合して 3 次元を形成したいのですが、meshgrid()、dstack()、concatenate() などの関数を見てきましたが、それらのいずれも正しく収まるようには見えません。コードに。

このプログラムは、点光源からの波の広がりを 2 次元配列でモデル化し、3 次元配列は、媒質の変位が波長の経過とともにどのように変化するかを示します。

def make_wave_snapshot(size,wavelength,phase):
    waves_array = np.zeros((size,size),np.float)
    if size%2==0:
        for y in range(size):
            for x in range(size):
                r = math.hypot((size/2 - x - 0.5),(size/2 - y - 0.5))
                d = np.sin((2*math.pi*r/wavelength)-phase)/np.sqrt(r)
                waves_array[y,x] = d
        dp.display_2d_array(waves_array) #This is in another module altogether
        return waves_array #Displays array showing values
    else:
        return 'Please use integer of size.'

def make_wave_sequence(size,wavelength,nsteps):
    waves_sequence = np.zeros((nsteps,size,size),np.float)
        if nsteps%1==0:
            for z in range(nsteps):
                make_wave_snapshot(size,wavelength,(2*math.pi*z/nsteps))
                waves_sequence = ???
            return waves_sequence #Displays array showing values
        else:
            return 'Please use positive integer for number of steps'

問題は、「wave_array」を「wave_sequence」に変えることです。コードを書く場合は、寛大なコメントをいただければ幸いです。どうもありがとう!

4

1 に答える 1

4

私が正しく理解していれば、次のような 3 次元配列があります。

wave = np.zeros((2, 2, 2), np.float)

([[[0., 0.],
   [0., 0.]],
  [[0., 0.],
   [0., 0.]]])

そして、次のような関数から返された 2 次元配列を挿入します。

([[ 1., 2.],
  [ 3., 4.]])

3D 配列が次のようになります。

([[[1., 2.],
   [3., 4.]],
  [[0., 0.],
   [0., 0.]]])

forループの最初の繰り返しの後。それが正しければ、それは実際には非常に単純であり、ほとんどの道のりです。正しいエントリを選択する限り、2D 配列である 3D 配列に「要素」を割り当てることができます。

for z in range(nsteps):
    waves_sequence[z] = make_wave_snapshot(size,wavelength,(2*math.pi*z/nsteps))
于 2013-01-21T19:32:33.757 に答える