如何在Python中合并两个不同维度的numpy数组?
Python 2.7: 试图: 从一维Numpy数组中添加一个日期类型为64(D)的列(arr_date) 到现有的多维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的
>> 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]')])