我的文件中的数据看起来像这样
864 | 85 | '[150, 145, 110, 99, 95, -10] | ....
我可以将这些数据读作
np.genfromtxt(neighbors_file, delimiter = '|', dtype=(int, int, '|S66'), usecols=(0, 1, 2))
这给了我一个数组,每个line
作为一个元组
d = array([(864, 85, '[150, 145, 110, 99, 95, -10]'),
(864, 92, '[160, 147, 97, -22]'),
(864, 94, '[186, 146, 144, 114, 106]'), ...,
(3376, 734, '[733, 532, 531, 528, 524, 521]'),
(3376, 735, '[742, 673, 611, 529, 514, 513]'),
(3376, 742, '[735, 611, 533, 514, -15, -16]')],
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', 'S66')])
现在我必须使用索引d[i]
而不是使用
来迭代这些行
第一列为d[:, 0]
,第二列为d[:, 1]
。
有什么想法吗?
答案 0 :(得分:2)
根据定义,Numpy数组不会混合,这意味着d [i,j]中的每个元素都必须属于该类型。所以没有办法做你想做的事。有关详情,请查看文档http://docs.scipy.org/doc/numpy/reference/arrays.html
答案 1 :(得分:0)
d = array([(864, 85, '[150, 145, 110, 99, 95, -10]'),
(864, 92, '[160, 147, 97, -22]'),
(864, 94, '[186, 146, 144, 114, 106]'), ...,
...],
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', 'S66')])
是一个结构化数组。请注意化合物dtype
,它来自您的dtype=(int, int, '|S66')
参数。
而不是二维数组的行和列,它有记录和字段。
d[0] # one record, same dtype
d['f0'] # an array in ints, the first field
d['f2'] # an array of strings, the 3rd field
d[1]['f1'] # 92
d['f1'][1] # same thing
对genfromtxt
返回的内容的困惑非常普遍;如果这还不够,还有更多的答案。
从技术上讲,每条线都是&#39;不是元组,而是numpy.void
,复合dtype元素。它显示为元组,以便更好地将其与nd数组的维度区分开来。有关详细信息,请参阅我最近的其他答案:https://stackoverflow.com/a/36606421/901925