考虑使用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]
问题是,数组的内容是元组。 所以,当你问data[:2][0]
它返回一个元组的列表中的第0项,而不是每个元组的第0项。 使用下面的代码片段:
output = []
for i in range(2):
output += data[:2][i][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')
几个字段,返回另一结构化阵列(如在你的下一个问题所示, 从阵列的Python元素的访问范围 )
In [621]: data[['f1','f2']]
Out[621]:
array([(2, 8), (5, 12), (4, 11)],
dtype=[('f1', '<i8'), ('f2', '<i8')])