将一维结构化数组转换为2D numpy数组

时间:2015-09-24 16:40:14

标签: python arrays numpy

我有一维结构化数组,例如([(1,2),(3,4)])并希望将其转换为2D numpy数组([[1,2],[3,4]] )。现在我正在使用列表理解,然后是np.asarray()

list_of_lists = [list(elem) for elem in array_of_tuples]
array2D = np.asarray(list_of_lists)

这看起来效率不高 - 有更好的方法吗?感谢。

注意:这个问题的初始版本提到了" numpy数组元组"而不是一维结构化数组。这可能对我这个迷茫的python新手很有用。

1 个答案:

答案 0 :(得分:3)

在评论中,您声明数组是一维的,dtype为[('x', '<f4'), ('y', '<f4'), ('z', '<f4'), ('confidence', '<f4'), ('intensity', '<f4')]。结构化数组中的所有字段都是相同的类型('<f4'),因此您可以使用view方法创建二维视图:

In [13]: x
Out[13]: 
array([(1.0, 2.0, 3.0, 4.0, 5.0), (6.0, 7.0, 8.0, 9.0, 10.0)], 
      dtype=[('x', '<f4'), ('y', '<f4'), ('z', '<f4'), ('confidence', '<f4'), ('intensity', '<f4')])

In [14]: x.view('<f4').reshape(len(x), -1)
Out[14]: 
array([[  1.,   2.,   3.,   4.,   5.],
       [  6.,   7.,   8.,   9.,  10.]], dtype=float32)

在这种情况下,view方法会产生展平结果,因此我们必须使用reshape方法将其重塑为二维数组。