如何在Python中合并两个不同维度的numpy数组?

如何在Python中合并两个不同维度的numpy数组?,python,arrays,numpy,append,concatenation,Python,Arrays,Numpy,Append,Concatenation,Python 2.7: 试图: 从一维Numpy数组中添加一个日期类型为64(D)的列(arr_date) 到现有的多维Numpy数组(数据) 出现以下错误: 'TypeError:无效的类型升级' 'numpy.AxisError:轴1超出维度1数组的界限' 创建的列,该列需要追加: >> arr_date << [['2019-04-21'] ['2019-04-21'] ['2019-04-21']] >到达日期 在您回答我关于data.dtype的

Python 2.7:

试图:

从一维Numpy数组中添加一个日期类型为64(D)的列(arr_date) 到现有的多维Numpy数组(数据)

出现以下错误:

  • 'TypeError:无效的类型升级'
  • 'numpy.AxisError:轴1超出维度1数组的界限'
  • 创建的列,该列需要追加:

    >> arr_date
    <<     
    [['2019-04-21']
     ['2019-04-21']
     ['2019-04-21']]
    
    >到达日期
    
    在您回答我关于
    data.dtype
    的问题之前,我将添加逗号,并将
    data
    列为元组:

    In [117]: data = [(2019, 4, 21, 4.9, -16.5447, -177.1961,  22.4, 'US'), 
         ...: (2019, 4, 21, 4.8,  -9.5526,  109.6003,  10. , 'UK'), 
         ...: (2019, 4, 21, 4.6,  -7.2737,  124.0192, 554.9, 'FR')]                      
    
    In [118]: arr_date = np.zeros((len(data),1), dtype='datetime64[D]') 
         ...:  
         ...: i = 0 
         ...:  
         ...: while i < len(data):     
         ...:         date = dt.date(data [i][0], data[i][1], data[i][2])      
         ...:         arr_date[i][0] = date     
         ...:         i += 1     
         ...:                                                                            
    
    In [119]: arr_date                                                                   
    Out[119]: 
    array([['2019-04-21'],
           ['2019-04-21'],
           ['2019-04-21']], dtype='datetime64[D]')
    
    您的
    日期
    迭代与此配合使用。但是可以通过名称访问
    data1
    的字段(而不是列):

    In [127]: data1['f0']                                                                
    Out[127]: array([2019, 2019, 2019], dtype=int32)
    
    column\u stack
    可以将(3,)数组与(3,1)连接起来生成(3,2),但是:

    append_字段
    应该可以做到这一点,但使用起来可能有点棘手:

    In [137]: rf.append_fields(data1, 'date', arr_date.ravel(), usemask=False)           
    Out[137]: 
    array([(2019, 4, 21, 4.9, -16.5447, -177.1961,  22.4, 'US', '2019-04-21'),
           (2019, 4, 21, 4.8,  -9.5526,  109.6003,  10. , 'UK', '2019-04-21'),
           (2019, 4, 21, 4.6,  -7.2737,  124.0192, 554.9, 'FR', '2019-04-21')],
          dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<f4'), ('f6', '<f4'), ('f7', '<U2'), ('date', '<M8[D]')])
    
    [137]中的
    :rf.append_字段(data1,'date',arr_date.ravel(),usemack=False)
    出[137]:
    数组([(2019,4,21,4.9,-16.5447,-177.1961,22.4,'US','2019-04-21'),
    (2019,4,21,4.8,-9.5526109.6003,10.,“英国”,“2019-04-21”),
    (2019,4,21,4.6,-7.2737124.0192554.9,'FR','2019-04-21'),
    
    数据类型=[('f0',这些函数都使用
    np.concatenate
    ,这意味着输入必须具有兼容的数据类型和形状。如果其中一个失败,其他函数也很可能失败,特别是如果是数据类型问题。什么是
    数据
    。它看起来像一个元组列表,只是元组之间缺少逗号。它是结构化数组吗形状是什么,(3,)?什么是
    dtype
    数据是通过加载
    csv
    生成的,类似于
    genfromtxt
    ?是的,数据是通过加载csv并使用模块genfromtxt生成的。非常感谢您的解释,这非常有帮助。关于append\u字段的技术页面也非常有用!
    In [127]: data1['f0']                                                                
    Out[127]: array([2019, 2019, 2019], dtype=int32)
    
    In [130]: np.column_stack((data, arr_date))                                          
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-130-5c8e6a103474> in <module>
    ----> 1 np.column_stack((data, arr_date))
    
    /usr/local/lib/python3.6/dist-packages/numpy/lib/shape_base.py in column_stack(tup)
        638             arr = array(arr, copy=False, subok=True, ndmin=2).T
        639         arrays.append(arr)
    --> 640     return _nx.concatenate(arrays, 1)
    
    TypeError: invalid type promotion
    
    In [131]: import numpy.lib.recfunctions as rf 
    
    In [137]: rf.append_fields(data1, 'date', arr_date.ravel(), usemask=False)           
    Out[137]: 
    array([(2019, 4, 21, 4.9, -16.5447, -177.1961,  22.4, 'US', '2019-04-21'),
           (2019, 4, 21, 4.8,  -9.5526,  109.6003,  10. , 'UK', '2019-04-21'),
           (2019, 4, 21, 4.6,  -7.2737,  124.0192, 554.9, 'FR', '2019-04-21')],
          dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<f4'), ('f6', '<f4'), ('f7', '<U2'), ('date', '<M8[D]')])