2016-12-05 53 views
0

我有一个四维阵列:array = np.random.rand(3432,1,30,512)numpy的插入2D阵列到4D构造

我也有5具有形状套2D阵列(30,512)

我要插入这些成沿轴1的4D结构,使得我的最终形状是(3432,6,30,512)(5个新阵列+原始1)。我需要为每个3432元素迭代插入此集合

最有效的方法是什么?

我试过将2D重塑成4D,然后沿着轴1插入。我期望轴1永远不会超过6的大小,但2D数组​​只是不断增加,而不是每组3432个元素。我想我的问题就出在不完全了解obj参数有关的insert方法:

all_data = np.reshape(all_data, (-1, 1, 30, 512)) 

for i in range(all_data.shape[0]): 
    num_band = 1 
    for band in range(5):    
     temp_trial = np.zeros((30, 512)) # Just an example. values arent actually 0 
     temp_trial = np.reshape(temp_trial, (1,1,30,512)) 
     all_data = np.insert(all_data, num_band, temp_trial, 1) 

     num_band += 1 
+0

“insert”并不意味着迭代工作。确保您首先了解文档示例。 – hpaulj

回答

1

首先创建最终形状的数组,后来插入的元素:

final = np.zeros((3432,6,30,512)) 

for i in range(3432): # note, this will take a while 
    for j in range(6): 
     final[i, j, :, :] = # insert your array here (np.ones((30, 512))) 

,或者如果你真的想在第零轴上广播这一点,假设3432的每一个对于每个“带”应该是相同的:

for i in range(6): 
    final[:, i, :, :] = # insert your array here (np.ones((30, 512))) 

只要你不做很多循环,不需要对其进行矢量化

+1

'insert'必须做这种分配和复制,所以在开始时设置完整大小的'final'是非常有意义的。 – hpaulj