访问在Python 2.x的

问题描述:

阵列的列表的阵列内的元件考虑以下数据集提取使用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] 

问题是数组的内容是元组。所以,当你要求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

这是一个结构化数组,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')])