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', '<f8')])
In [18]: data['Time']
Out[18]: array([ 1., 2., 3.])
In [19]: data.dtype
Out[19]: dtype([('Time', '<f8')])
的關鍵是從首部導出的dtype
,並且數據的外觀。我建議從更復雜的csv
文件中查看dtype
。
從零開始創建dtype
有多種方法。重新創建這種情況的是dt = np.dtype([('Time',float)])
。
構建類似數組的一個好方法是使用np.zeros
(或np.empty
),指定大小和相同的dtype
。一旦創建了數組,您可以逐字段填寫值。
In [20]: data2=np.zeros(3,dtype=data.dtype)
In [21]: data2['Time']=[1,2,3]
另一種創建結構化數組的方法是使用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,)
如果字段具有完全相同的D型,你可以view
二維數組新dtype
。
In [29]: np.array([1.,2.,3.]).view(data.dtype)
標準免責聲明:與[pandas](http://pandas.pydata.org)DataFrames相比,recarrays在某些情況下非常方便。數據處理對大熊貓來說非常方便,如果需要,您可以在最後轉換爲重新數組。 – DSM