重组元组数组

时间:2016-09-23 14:18:15

标签: python arrays numpy dimensions

我有一组元组元组,其中第二级不应该是元组,我想将它全部转换为类似二维数组的东西。 有没有一种快速的方法可以从这个凌乱的1-d重构为漂亮干净的2-d或结构化阵列?

注意:这些元组执行包含各种类型。我希望能够转置和二维切片等。这个数据。

...即

[((1,-4,7.0),)
((2,-5,8.0),)
((3,-6,9.0),)]

编辑试图解决人们用原始问题指出的问题

2 个答案:

答案 0 :(得分:0)

您可以使用np.squeeze

np.squeeze(<your array>)

答案 1 :(得分:0)

dtype在这里很重要。我最接近您的显示器的是嵌套的dtype

In [182]: dt1=np.dtype('i,i,f')
In [183]: dt=np.dtype([('a',dt1,),('b',dt1,),('c',dt1,)])

In [184]: x=np.ones(1,dtype=dt)

In [185]: print(x)
[((1, 1, 1.0), (1, 1, 1.0), (1, 1, 1.0))]

(无最终,

如果我使用repr而非打印的默认str,我也会看到dtype:

In [186]: print(repr(x))
array([((1, 1, 1.0), (1, 1, 1.0), (1, 1, 1.0))], 
      dtype=[('a', [('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4')]), ('b', [('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4')]), ('c', [('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4')])])

重塑或挤压在这里不起作用,因为它已经是1d。 viewastype可以发挥作用。你想要扁平dtype,还是让它全部漂浮?你期望什么样的形状?目前,每条记录由9个数字组成。

使用兼容的dtype,我可以将此数组视为9个值的记录:

In [195]: dt2=np.dtype('i,i,f,i,i,f,i,i,f')
In [196]: x.view(dt2)
Out[196]: 
array([(1, 1, 1.0, 1, 1, 1.0, 1, 1, 1.0)], 
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<f4'), ('f6', '<i4'), ('f7', '<i4'), ('f8', '<f4')])

将此x转换为浮点数组的最简单方法是tolist(它不是最快):

In [256]: x['c']=(20,21,22)
In [257]: x['b']=(10,11,12)
In [258]: x['a']=(1,2,3)

In [263]: print(x)
[((1, 2, 3.0), (10, 11, 12.0), (20, 21, 22.0))]
In [264]: np.array(x.tolist())
Out[264]: 
array([[[  1.,   2.,   3.],
        [ 10.,  11.,  12.],
        [ 20.,  21.,  22.]]])