考虑使用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]
答案 0 :(得分:1)
问题是数组的内容是元组。因此,当您要求output = []
for i in range(2):
output += data[:2][i][0]
时,它会返回元组列表中的第0项,而不是每个元组的第0项。使用以下代码段:
sizeof (tab1k_p) / sizeof(*tab1k_p);
希望我帮助过。
答案 1 :(得分: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')])