【问题标题】:Combining two record arrays组合两个记录数组
【发布时间】:2010-12-15 02:12:40
【问题描述】:

我有两个具有完全相同字段的 Numpy 记录数组。将它们组合成一个的最简单方法是什么(即将一个表附加到另一个表上)?

【问题讨论】:

    标签: python numpy recarray


    【解决方案1】:
    for i in array1:
        array2.append(i)
    

    或者(如果实施)

    array1.extend(array2)
    

    现在 array1 也包含了 array2 的所有元素

    【讨论】:

      【解决方案2】:
      #!/usr/bin/env python
      import numpy as np
      desc = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')} 
      a = np.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
      b = np.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
      alen=a.shape[0]
      blen=b.shape[0]
      a.resize(alen+blen)
      a[alen:]=b[:]
      

      这适用于结构化数组,但不适用于重新数组。也许这是坚持使用结构化数组的一个很好的理由。

      【讨论】:

      • 这有什么原因不能与recarrays一起工作?我认为 recarrays 只是带有额外 getattribute__/__setattr 参数的结构化数组?
      • 我不知道为什么。我只知道,当我用 recarrays 尝试同样的事情时,我得到一个 ValueError: cannot resize this array: it does not own its own data。过去在使用 recarrays 时遇到过类似的问题,我倾向于使用结构化数组而不是 recarrays。语法糖不值得麻烦。
      【解决方案3】:

      使用numpy.hstack():

      >>> import numpy
      >>> desc = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')} 
      >>> a = numpy.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
      >>> numpy.hstack((a,a))
      array([('M', 64.0, 75.0), ('F', 25.0, 60.0), ('M', 64.0, 75.0),
             ('F', 25.0, 60.0)], 
            dtype=[('gender', '|S1'), ('age', '<f4'), ('weight', '<f4')])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2016-07-13
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多