2016-11-23 169 views
1

這是最高效的方式 的東西轉換成類似2D蟒蛇名單2D numpy的陣列

problem = [ [np.array([1,2,3]), np.array([4,5])], 
      [np.array([6,7,8]), np.array([9,10])]] 

desired = np.array([[1,2,3,4,5], 
        [6,7,8,9,10]]) 

不幸的是,列和行的最終數量(和子陣列的長度)事先是未知的,因爲從二進制文件讀取子陣列,按記錄進行記錄。

+0

因此,列表中每個元素的元素數量是相同的,就像這裏的「5」一樣? – Divakar

+0

'bmat'有效嗎? – hpaulj

+0

每行的編號是相同的,所以沒有填充或其他要求。 – macmallow

回答

1

我想這:

print np.array([np.hstack(i) for i in problem]) 

使用你的榜樣,這個運行在0.00022s,wherease concatenate需要0.00038s

您還可以使用apply_along_axis雖然這運行在0.00024s:

print np.apply_along_axis(np.hstack, 1, problem) 
+0

使用毫秒會更清晰我認爲 –

+0

看起來不錯,但我相信這是否需要2個分配過程?首先爲每一行,然後每一行都被複制到大數組中? – macmallow

+1

查看'bmat'代碼 - 每行有'hstack','vstack'來加入行。如果列表變平,可以使用一個'concatenate',然後重新整形。我認爲時差並不重要。 – hpaulj

5

如何:

problem = [[np.array([1,2,3]), np.array([4,5])], 
     [np.array([6,7,8]), np.array([9,10])]] 

print np.array([np.concatenate(x) for x in problem])