2016-11-23 178 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])