组合2-d阵列以形成3-d阵列

时间:2013-01-21 18:05:36

标签: python numpy

我正在定义一个返回3-d网格的函数。在它期间,我使用已经定义的函数返回一个二维数组。我想在迭代过程中加入这些2-d arriys来形成3-d但是我看过像meshgrid(),dstack(),concatenate()这样的函数,但似乎无法让它们中的任何一个适合进入代码。

该程序模拟来自二维阵列上的点源的波的扩散,三维阵列显示介质的位移如何在波长的过程中发生变化。

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'。如果您编写任何代码,将非常感谢慷慨的评论。非常感谢!

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你有一个三维数组,如:

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

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

你想插入一个二维数组,从你的函数返回,如:

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

这样你的3D阵列现在就是:

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

for循环的第一次迭代之后。如果这是正确的,那么它实际上非常简单,你就是那里的大部分。只要选择正确的条目,就可以为3D阵列指定一个“元素”:

for z in range(nsteps):
    waves_sequence[z] = make_wave_snapshot(size,wavelength,(2*math.pi*z/nsteps))