2017-04-04 39 views
0

我目前正在尋找方法,在其中我可以將ndarray分割成更小的ndarrays。例如:給出了具有形狀(78,1440,3)的ndarray,我想從中提取一個尺寸較小的ndarrays列表(78,72,3),這將是20個較小的子ndarrays。分割ndarray到更小的ndarray存儲在列表中

我試過使用numpy.split

numpy.split(matrix,72,axis=1) 

產生長度72 的列表,並且所述第一入口具有形狀(78,20,3)..

爲何我不能夠提取的大小我需要?

+0

在列表或「數組」中? –

+1

因爲'72'是你把它分成**的元素數。 –

回答

1

72在split數量的元件的分裂尺寸(根據軸),以將其分割成,而不是大小。

但是,您可以使用:

numpy.split(matrix,matrix.shape[1]//72,axis=1)

將其分割成段72的20個元素(您給定的情況)。請注意,您必須確保shape[1]可以分配72,否則將提出ValueError

0

方法1:可以使用np.hsplit這個任務究竟做 -

np.hsplit(arr,20) # creates list of 20 arrays 

採樣運行 -

1)輸入數組:

In [52]: a = np.random.randint(0,9,(2,6,3)) 

In [53]: a 
Out[53]: 
array([[[7, 8, 8], 
     [7, 7, 1], 
     [1, 6, 4], 
     [6, 3, 8], 
     [4, 7, 4], 
     [0, 6, 3]], 

     [[0, 8, 5], 
     [2, 2, 8], 
     [6, 0, 7], 
     [5, 4, 6], 
     [4, 3, 1], 
     [8, 6, 6]]]) 

2)分割線= 1變成3部分,因此每個部分/子陣列將b e長度(2,2,3)形狀。因此,我們會得到那些3個陣列的列表:

In [54]: b = np.hsplit(a,3) 

3)手動驗證的部分:

In [55]: b[0] 
Out[55]: 
array([[[7, 8, 8], 
     [7, 7, 1]], 

     [[0, 8, 5], 
     [2, 2, 8]]]) 

In [56]: b[1] 
Out[56]: 
array([[[1, 6, 4], 
     [6, 3, 8]], 

     [[6, 0, 7], 
     [5, 4, 6]]]) 

In [57]: b[2] 
Out[57]: 
array([[[4, 7, 4], 
     [0, 6, 3]], 

     [[4, 3, 1], 
     [8, 6, 6]]]) 

方法2:這個任務的另一種手段是np.array_split -

np.array_split(arr,20,axis=1)