Чтение файла данных с неравным количеством столбцов с использованием numpy - PullRequest
0 голосов
/ 12 октября 2018

У меня есть файл .dat с номерами.В первой строке этот файл имеет пять столбцов, а во всех последующих строках - четыре столбца.Я хочу иметь возможность читать этот файл, используя NumPy.Я сталкиваюсь со следующей ошибкой при попытке прочитать этот файл в настоящее время:

In [3]: F1 = np.loadtxt(‘file.dat')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent 
call last)
<ipython-input-3-c0f31adaf29a> in <module>()
----> 1 F1 = np.loadtxt(‘file.dat')

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding)
   1090         # converting the data
   1091         X = None
-> 1092         for x in read_data(_loadtxt_chunksize):
   1093             if X is None:
   1094                 X = np.array(x, dtype)

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in read_data(chunk_size)
   1014                 line_num = i + skiprows + 1
   1015                 raise ValueError("Wrong number of columns at line %d"
-> 1016                                  % line_num)
   1017 
   1018             # Convert each value according to its column and store

ValueError: Wrong number of columns at line 2 

Как я могу прочитать все строки файла, кроме первой строки, используя python?Я приложил файл примера здесь .

Кроме того, первый столбец этого файла (минус первая строка) имеет n ^ 2 количество строк (в примере у меня n = 3, а записи в столбце 1,2,3,4, 5,6,7,8,9).Я хочу прочитать первый столбец (минус первую строку) и сохранить его в виде текстового файла, где формы (n, n) (то есть текстовый файл должен иметь n строк и n столбцов).То есть я хочу, чтобы в сохраненной матрице были записи в следующем порядке:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

Я буду благодарен за помощь.

1 Ответ

0 голосов
/ 12 октября 2018

Некоторые эксперименты, которые нужно выполнить: (не оптимизировано) 1. Прочитайте в строках файла:

edit: файл 'file.dat' содержит пустые строки.Предложение if line.strip()... предназначено для работы с пустыми строками.

with open('file.dat', 'r') as fhand:
    file_lines = [line[:-1] for line in fhand if line.strip() != ''] # remove the last character '\n'. **Remove empty lines**.

Если вам не нравится первый ряд, отбросьте его.

file_lines.pop(0)

Теперь, когдаостальные строки имеют одинаковое количество столбцов числовых записей, вы можете разделить записи в каждой строке и выполнить преобразование типа:

mat_raw = [[float(term) for term in line.split()] for line in file_lines]

Затем вы получите матрицу с плавающей точкой.Для удобства нарезки преобразуйте его в массив numpy.

mat = numpy.array(mat_raw)
# then you can do whatever you like. eg: first column
first_col = mat[:, 0]
# reshape it to n by n matrix:
res = first_col.reshape((n, n))
...

В зависимости от формата вашего файла и вашей цели, вы можете оптимизировать этот код для собственного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...