【问题标题】:How to create a uniform structured array in numpy?如何在 numpy 中创建统一的结构化数组?
【发布时间】:2022-01-15 13:35:15
【问题描述】:

我可以在 numpy 中创建以下结构化数组:

dt = np.dtype([('n', 'i4'),('x', 'f8'), ('y', 'f8'), ('z', 'f8')])
arr = np.array((1, 5.0, 6.0, 7.0)) 

这将创建数组:

array((1, 5., 6., 7.), dtype=[('n', '<i4'), ('x', '<f8'), ('y', '<f8'), ('z', '<f8')])

dt 的最后三列都是浮点数f8 当有多个相同类型的连续列时,是否有更短的方法来声明dt

【问题讨论】:

  • dt = np.dtype([('n', 'i4'), *zip('xyz', ['f8']*3)])?

标签: python arrays numpy


【解决方案1】:

不是更快,但您可以创建一个辅助函数来生成 dtype:

def gen_dtype(names, override=None, default='f8'):
    d = dict(zip(names, [default]*len(names)))
    d.update(override)
    return np.dtype(list(d.items()))

dt  = gen_dtype(list('nxyz'), {'n': 'i4'})

输出:

>>> dt
dtype([('n', '<i4'), ('x', '<f8'), ('y', '<f8'), ('z', '<f8')])

【讨论】:

    【解决方案2】:

    另一种方法是使用字典格式来定义dtype:

    dt2 = np.dtype( {'names': ['n','x','y','z'],
                     'formats': ['i4'] + ['f8']*3} )
    

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2019-05-08
      相关资源
      最近更新 更多