2016-10-07 4 views
0

Я использую genfromtxt для импорта данных из txt-файла.Индексирование ndarray - 1 элемент хранится по-разному в> 1

Эти данные импортируются в ndarray, согласно genfromtxt

Обычно, этот текстовый файл имеет много строк данных в Inport, а это означает, что ndarray как это:

array([ ('2016-04-17T00:08:42.273000Z', '2016-04-17T00:08:50.595000Z', '2016-04-17T00:08:58.378391Z', '2016-04-17T00:08:58.840273Z', '2016-04-17T00:09:05.670000Z', '2016-04-17T00:09:06.115000Z', '2016-04-17T00:09:07.155000Z', '2016-04-17T00:09:06.804999Z', '2016-04-17T00:09:08.488391Z', '2016-04-17T00:09:14.890273Z', '2016-04-17T00:09:11.648393Z', 1.702756, 10, 3.959), 
    ('2016-04-17T01:11:11.393000Z', '2016-04-17T01:11:19.715000Z', '2016-04-17T01:11:27.498391Z', '2016-04-17T01:11:27.960273Z', '2016-04-17T01:11:34.790000Z', '2016-04-17T01:11:35.235000Z', '2016-04-17T01:11:36.275000Z', '2016-04-17T01:11:35.924999Z', '2016-04-17T01:11:37.608391Z', '2016-04-17T01:11:44.010273Z', '2016-04-17T01:11:40.768393Z', 3.084912, 10, 3.423), 
    ('2016-05-20T19:10:42.883000Z', '2016-05-20T19:10:51.205000Z', '2016-05-20T19:10:58.978393Z', '2016-05-20T19:10:59.441114Z', '2016-05-20T19:11:06.280000Z', '2016-05-20T19:11:06.705000Z', '2016-05-20T19:11:07.725000Z', '2016-05-20T19:11:07.405000Z', '2016-05-20T19:11:09.108393Z', '2016-05-20T19:11:15.481160Z', '2016-05-20T19:11:12.258393Z', 1.956513, 10, 3.078)], 
    dtype=[('origintime', 'S27'), ('JAMA', 'S27'), ('FLF1', 'S27'), ('MAG1', 'S27'), ('AV18', 'S27'), ('AV21', 'S27'), ('AMA1', 'S27'), ('BV15', 'S27'), ('PPLP', 'S27'), ('HPAL', 'S27'), ('ILLI', 'S27'), ('stackedcorr', '<f8'), ('totalstations', '<i8'), ('magestimate', '<f8')]) 

Но когда текстовый файл имеет только одну строку, то ndarray, как это (обратите внимание на отсутствие квадратных скобок, как и в предыдущем примере):

array(('2016-05-08T03:13:02.841000Z', '2016-05-08T03:13:10.705000Z', '1900-01-01T00:00:00.000000Z', '2016-05-08T03:13:14.099997Z', '2016-05-08T03:13:14.938393Z', '2016-05-08T03:13:29.228391Z', '2016-05-08T03:13:31.868393Z', '2016-05-08T03:13:31.909995Z', '2016-05-08T03:13:36.920000Z', '2016-05-08T03:13:37.080000Z', '2016-05-08T03:13:37.635000Z', 9.0, 9, 3.41), 
    dtype=[('origintime', 'S27'), ('JAMA', 'S27'), ('CABP', 'S27'), ('MAG1', 'S27'), ('FLF1', 'S27'), ('PAC1', 'S27'), ('GGPT', 'S27'), ('PINO', 'S27'), ('SUCR', 'S27'), ('BNAS', 'S27'), ('SLOR', 'S27'), ('stackedcorr', '<f8'), ('totalstations', '<i8'), ('magestimate', '<f8')]) 

Разница в том, что многострочный вход представляет собой массив, а однострочный вход - нет.

Это помешает индексированию, поскольку я не могу перебрать results['origintime'][i] из-за возможности однострочного ввода.

Как преобразовать ndarray однострочного ввода (без квадратных скобок) в список len = 1, то есть он имеет тот же формат, что и многострочные ndarrays?

Благодаря

ответ

1

Numpy на самом деле загружается в файл в виде массива, но это «0-мерный» массив. То есть, results.ndim вернется 0. Вы можете преобразовать его в 1-мерный массив с 1 элементом, выполнив results.reshape((1,)).

Если вы читаете в файле, и вы не знаете, будет ли это иметь один или несколько строк заранее, вы можете сделать:

results = np.genfromtxt(filename) 
if results.ndim==0: 
    results.reshape((1,)) 
+0

Ваш метод намного короче и изящнее, чем моя работа вокруг так Я вернул код, чтобы использовать его. Благодаря! – mjp