np.core.records在创建和操作结构化数组方面有一些很好的函数,但是知道如何从头开始构造这样的数组也是很好的。在
您的genfromtxt已从一个包含简单字符串值列的文件中读取。我可以用字符串列表重新创建它:In [16]: data=np.genfromtxt(['Time','1.','2.','3.'],delimiter=',',names=True)
In [17]: data
Out[17]:
array([(1.0,), (2.0,), (3.0,)],
dtype=[('Time', '
In [18]: data['Time']
Out[18]: array([ 1., 2., 3.])
In [19]: data.dtype
Out[19]: dtype([('Time', '
键是从头派生的dtype,以及数据的外观。我建议从更复杂的csv文件中查看dtype。在
从零开始创建dtype有多种方法。重现这种情况的是dt = np.dtype([('Time',float)])。在
构造类似数组的一个好方法是使用np.zeros(或np.empty),指定大小和相同的dtype。创建数组后,可以逐个字段填充值。在
^{pr2}$
另一种创建结构化数组的方法是使用np.array。关键是数据必须以元组的列表形式提供。在In [22]: data1=np.array([(1,),(2,),(3,)],dtype=data.dtype)
查看np.core.records.fromrecords的代码可以看到其他几种方法。在
在最常见的情况下,如果逐行填充数组:In [26]: data3=np.zeros(3,dtype=data.dtype)
In [27]: for i,v in enumerate([1,2,3]):
....: data3[i]=(v,)
如果这些字段都有相同的数据类型,则可以使用新的dtype创建一个2d数组。在In [29]: np.array([1.,2.,3.]).view(data.dtype)