Python 结构化numpy数组中的这列0是什么?
我制作了一个numpy结构数组,但它的结构与我想象的不同Python 结构化numpy数组中的这列0是什么?,python,numpy,Python,Numpy,我制作了一个numpy结构数组,但它的结构与我想象的不同 >>> data = np.zeros(3, dtype=[('date', 'datetime64[ms],i4'), ('price', np.float32)]) >>> data array([(('1970-01-01T00:00:00.000', 0), 0.), (('1970-01-01T00:00:00.000', 0), 0.), (('1
>>> data = np.zeros(3, dtype=[('date', 'datetime64[ms],i4'), ('price', np.float32)])
>>> data
array([(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.)],
dtype=[('date', [('f0', '<M8[ms]'), ('f1', '<i4')]), ('price', '<f4')])
谁能给我解释一下它们的用途吗?我想知道如何在结构化数组中选择像
data[:,0]
这样的列。这是因为这里嵌套了三个级别:
In [644]: data[0]
Out[644]: (('1970-01-01T00:00:00.000', 0), 0.)
In [645]: data[0][0]
Out[645]: ('1970-01-01T00:00:00.000', 0)
In [646]: data[0][0][0]
Out[646]: numpy.datetime64('1970-01-01T00:00:00.000')
您可以通过以下方式进行设置:
In [647]: data[0][0][0]=datetime64('2017-01-01T00:00:00.000')
这是因为这里嵌套了三个级别:
In [644]: data[0]
Out[644]: (('1970-01-01T00:00:00.000', 0), 0.)
In [645]: data[0][0]
Out[645]: ('1970-01-01T00:00:00.000', 0)
In [646]: data[0][0][0]
Out[646]: numpy.datetime64('1970-01-01T00:00:00.000')
您可以通过以下方式进行设置:
In [647]: data[0][0][0]=datetime64('2017-01-01T00:00:00.000')
按名称访问和设置字段:
In [16]: data = np.zeros(3, dtype=[('date', 'datetime64[ms],i4'), ('price', np.f
...: loat32)])
In [17]: data
Out[17]:
array([(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.)],
dtype=[('date', [('f0', '<M8[ms]'), ('f1', '<i4')]), ('price', '<f4')])
In [18]: data['price']=[1,3,4]
In [19]: data['date']['f1']=12
In [21]: data
Out[21]:
array([(('1970-01-01T00:00:00.000', 12), 1.),
(('1970-01-01T00:00:00.000', 12), 3.),
(('1970-01-01T00:00:00.000', 12), 4.)],
dtype=[('date', [('f0', '<M8[ms]'), ('f1', '<i4')]), ('price', '<f4')])
但是让我们去掉无用的i4
字段
In [29]: data = np.zeros(3, dtype=[('date', 'datetime64[ms]'), ('price', np.float32)])
In [30]: data
Out[30]:
array([('1970-01-01T00:00:00.000', 0.), ('1970-01-01T00:00:00.000', 0.),
('1970-01-01T00:00:00.000', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
In [31]: data['date']=[1,2,3] # ms
In [32]: data
Out[32]:
array([('1970-01-01T00:00:00.001', 0.), ('1970-01-01T00:00:00.002', 0.),
('1970-01-01T00:00:00.003', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
In [33]: data['date']=np.array([1,2,3],dtype='datetime64[Y]') # years
In [34]: data
Out[34]:
array([('1971-01-01T00:00:00.000', 0.), ('1972-01-01T00:00:00.000', 0.),
('1973-01-01T00:00:00.000', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
单一日期:
In [35]: data['date'][2] = np.array('2017-10-31', 'datetime64[D]')
In [36]: data[2]
Out[36]: ('2017-10-31T00:00:00.000', 0.)
按名称访问和设置字段:
In [16]: data = np.zeros(3, dtype=[('date', 'datetime64[ms],i4'), ('price', np.f
...: loat32)])
In [17]: data
Out[17]:
array([(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.),
(('1970-01-01T00:00:00.000', 0), 0.)],
dtype=[('date', [('f0', '<M8[ms]'), ('f1', '<i4')]), ('price', '<f4')])
In [18]: data['price']=[1,3,4]
In [19]: data['date']['f1']=12
In [21]: data
Out[21]:
array([(('1970-01-01T00:00:00.000', 12), 1.),
(('1970-01-01T00:00:00.000', 12), 3.),
(('1970-01-01T00:00:00.000', 12), 4.)],
dtype=[('date', [('f0', '<M8[ms]'), ('f1', '<i4')]), ('price', '<f4')])
但是让我们去掉无用的i4
字段
In [29]: data = np.zeros(3, dtype=[('date', 'datetime64[ms]'), ('price', np.float32)])
In [30]: data
Out[30]:
array([('1970-01-01T00:00:00.000', 0.), ('1970-01-01T00:00:00.000', 0.),
('1970-01-01T00:00:00.000', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
In [31]: data['date']=[1,2,3] # ms
In [32]: data
Out[32]:
array([('1970-01-01T00:00:00.001', 0.), ('1970-01-01T00:00:00.002', 0.),
('1970-01-01T00:00:00.003', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
In [33]: data['date']=np.array([1,2,3],dtype='datetime64[Y]') # years
In [34]: data
Out[34]:
array([('1971-01-01T00:00:00.000', 0.), ('1972-01-01T00:00:00.000', 0.),
('1973-01-01T00:00:00.000', 0.)],
dtype=[('date', '<M8[ms]'), ('price', '<f4')])
单一日期:
In [35]: data['date'][2] = np.array('2017-10-31', 'datetime64[D]')
In [36]: data[2]
Out[36]: ('2017-10-31T00:00:00.000', 0.)
谢谢你的解释。你能告诉我为什么它是必要的,以及我如何在没有它的情况下制作结构化数组吗?我看不出是哪个部分的
data=np.zero(3,dtype=[('date','datetime64[ms],i4'),('price',np.float32)]
成功了。我认为i4在这里没有意义。只要尝试np.zero(3,dtype=[('date','datetime64[ms]),('price',np.float32)])
,它就会像你想象的那样运行。键入help(numpy.dtype)以获取更多解释。感谢您的解释。你能告诉我为什么它是必要的,以及我如何在没有它的情况下制作结构化数组吗?我看不出是哪个部分的data=np.zero(3,dtype=[('date','datetime64[ms],i4'),('price',np.float32)]
成功了。我认为i4在这里没有意义。只要尝试np.zero(3,dtype=[('date','datetime64[ms]),('price',np.float32)])
,它就会像你想象的那样运行。键入help(numpy.dtype)以获取更多解释。您应该按名称对字段进行索引,data['price']
,data['date']['f0']
etc创建表达式中“i4”的用途是什么?@hpaulj感谢您的帮助!我以为i4是datetime选项的一部分。您是否知道在创建结构化数组(例如NaT)时如何初始化默认值?您应该按名称对字段进行索引,data['price']
,data['date']['f0']
etc创建表达式中的'i4'的用途是什么?@hpaulj感谢您的帮助!我以为i4是datetime选项的一部分。您是否知道在创建结构化数组(例如NaT)时如何初始化默认值?