2017-09-24 34 views
0

陣列的列表的陣列內的元件考慮以下數據集提取使用numpy.genfromtxt():訪問在Python 2.x的

data[0:3] 
array([('T', 2, 8, 3, 5, 1, 8, 13, 0, 6, 6, 10, 8, 0, 8, 0, 8), 
     ('I', 5, 12, 3, 7, 2, 10, 5, 5, 4, 13, 3, 9, 2, 8, 4, 10), 
     ('D', 4, 11, 6, 8, 6, 10, 6, 2, 6, 10, 3, 7, 3, 7, 3, 9)], 
     dtype=[('f0', 'S1'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '<i8'), ('f8', '<i8'), ('f9', '<i8'), ('f10', '<i8'), ('f11', '<i8'), ('f12', '<i8'), ('f13', '<i8'), ('f14', '<i8'), ('f15', '<i8'), ('f16', '<i8')]) 

我試圖檢索使用從所述第一2個陣列中的字母下面的代碼,但它提供了第一個完整的數組,而不是每個數組中的第一個元素。

data[:2][0] 

回答

1

問題是數組的內容是元組。所以,當你要求data[:2][0]時,它返回元組列表中的第0個元素,而不是每個元組的第0個元素。使用以下代碼片段:

output = [] 
for i in range(2): 
    output += data[:2][i][0] 

希望我幫了忙。

+0

它們顯示爲元組,但實際上是結構化數組的記錄。你的'輸出'將是一個像[84,73,68]這樣的列表。這些是字節串的數字字節值,'[b'T',b'I',b'D']'。 – hpaulj

+0

哦,我明白了......呃,我認爲將字節轉換爲可用數據並不困難。無論如何,謝謝你的提示! – Rippr

0

這是一個結構化數組,1d有很多字段。字段由名稱訪問,而不是 '列' 編號:

In [618]: data 
Out[618]: 
array([(b'T', 2, 8, 3, 5, 1, 8, 13, 0, 6, 6, 10, 8, 0, 8, 0, 8), 
     (b'I', 5, 12, 3, 7, 2, 10, 5, 5, 4, 13, 3, 9, 2, 8, 4, 10), 
     (b'D', 4, 11, 6, 8, 6, 10, 6, 2, 6, 10, 3, 7, 3, 7, 3, 9)], 
     dtype=[('f0', 'S1'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '<i8'), ('f8', '<i8'), ('f9', '<i8'), ('f10', '<i8'), ('f11', '<i8'), ('f12', '<i8'), ('f13', '<i8'), ('f14', '<i8'), ('f15', '<i8'), ('f16', '<i8')]) 

一個元件或記錄(顯示像元組)

In [619]: data[0] 
Out[619]: (b'T', 2, 8, 3, 5, 1, 8, 13, 0, 6, 6, 10, 8, 0, 8, 0, 8) 

一個字段,一個數組:

In [620]: data['f0'] 
Out[620]: 
array([b'T', b'I', b'D'], 
     dtype='|S1') 

若干返回另一個結構化數組(如您的下一個問題所示,Access range of elements from an array Python

In [621]: data[['f1','f2']] 
Out[621]: 
array([(2, 8), (5, 12), (4, 11)], 
     dtype=[('f1', '<i8'), ('f2', '<i8')])