2015-11-04 82 views
4

我想要一個numpy數組,每個值都有值和相應的標籤。我正在使用這個數組進行線性迴歸,它將成爲我的X數據向量在方程y = Xb + error中。試圖創建一個帶標籤的numpy數組

我的X向量由大約20個變量組成,每個變量都可以按照像X['variable1']這樣的名稱引用。我最初使用字典來做到這一點,但意識到用於線性迴歸的scikit庫需要一個numpy矩陣,所以我正在嘗試構建一個標記爲numpy的數組。

我不斷收到錯誤提示:

TypeError: a bytes-like object is required, not 'int'. 

這是我在做什麼:

X = np.array([3],dtype=[('label1','int')]) 

我最終想要有20個標記值,像這樣:

X = np.array([3,40,7,2,...], 
      dtype=[('label1',int'),('label2','int'),('label3','int')...]) 

真的很感謝這裏的語法幫助。謝謝!

回答

5

正確的方法來建立一個結構數組,價值觀,是元組的列表:

In [55]: X 
Out[55]: 
array([(3,)], 
     dtype=[('label1', '<i4')]) 

In [56]: X=np.array([(3,4)],dtype=[('label1',int),('label2',int)]) 

In [57]: X 
Out[57]: 
array([(3, 4)], 
     dtype=[('label1', '<i4'), ('label2', '<i4')]) 

但是我必須提醒你這樣數組不2D(或矩陣),它是用1D字段:

In [58]: X.shape 
Out[58]: (1,) 

In [59]: X.dtype 
Out[59]: dtype([('label1', '<i4'), ('label2', '<i4')]) 

你不能跨田野做數學; X*2X.sum()將產生錯誤。在y = X*b + error等式中使用X將是無望的。

您可能會更好地使用真正的二維數組數組,並在頭部或字典中進行標籤和列號之間的映射。

或者使用熊貓。

+0

謝謝,我用你的第一種方法,做了類似於:'keyValues = [('A',0),('R',0),('N',0)]' – covfefe

0

由於有20個變量,內存是不是一個問題,你可以繼續使用字典上:

from collections import OrderedDict # Dictionary that remembers insertion order 
import numpy as np 

dd = OrderedDict() 
dd["Var1"] = 10 
dd["Var2"] = 20 
dd["Var3"] = 30 

# make numpy array from dict: 
xx = np.array([v for v in dd.values()]) 

# make dict() from array: 
xx2 = 2*xx 
dd2 = OrderedDict((k, v) for (k,v) in zip(dd.keys(), xx2)) 
相關問題