我有一组元组元组,其中第二级不应该是元组,我想将它全部转换为类似二维数组的东西。 有没有一种快速的方法可以从这个凌乱的1-d重构为漂亮干净的2-d或结构化阵列?
注意:这些元组执行包含各种类型。我希望能够转置和二维切片等。这个数据。
...即
[((1,-4,7.0),)
((2,-5,8.0),)
((3,-6,9.0),)]
编辑试图解决人们用原始问题指出的问题
答案 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。 view
或astype
可以发挥作用。你想要扁平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.]]])