【问题标题】:Restructuring Array of Tuples重构元组数组
【发布时间】:2017-02-01 10:47:50
【问题描述】:

我有一个元组的元组数组,其中第二级不应该是元组,我想将其全部转换为二维数组。 有没有一种快速的方法可以从这个凌乱的一维重构为一个干净整洁的二维或结构化数组?

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

即...

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

编辑以尝试解决人们在原始问题中指出的问题

【问题讨论】:

  • 您的阵列真的是这样吗?看起来你有元组而不是额外的维度。
  • 对不起,这是打印语句吐出的结构。我想它是一个元组的元组数组? AKA 没有花哨的方法来转换它?
  • 形状和dtype是什么?
  • 真的是准确打印出来的吗? IE。您是否将其复制并粘贴到stackoverflow中? Numpy 数组在其字符串表示中不将名称 array 大写。
  • 啊!是的,谢谢 - 这个特殊的例子恰好是 shape : (2271824L,) (所以一维),但它们的 dtype 非常复杂。我想这让我找到了答案——“这很复杂”。谢谢!

标签: python arrays numpy dimensions


【解决方案1】:

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 而不是 print 的默认 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.]]])

【讨论】:

    【解决方案2】:

    您可以使用np.squeeze

    np.squeeze(&lt;your array&gt;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多