访问阵列的列表在Python 2.x的一个阵列内的元件(Accessing an elements

2019-10-29 22:03发布

考虑使用numpy.genfromtxt()萃取以下数据集:

    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]

Answer 1:

问题是,数组的内容是元组。 所以,当你问data[:2][0]它返回一个元组的列表中的第0项,而不是每个元组的第0项。 使用下面的代码片段:

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

希望我帮助。



Answer 2:

这是一个结构阵列,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')

几个字段,返回另一结构化阵列(如在你的下一个问题所示, 从阵列的Python元素的访问范围 )

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


文章来源: Accessing an elements within a array of list of arrays in Python 2.x