Чтение чисел в сетке - PullRequest
       2

Чтение чисел в сетке

0 голосов
/ 27 апреля 2020

У меня есть сетка чисел, которая выглядит следующим образом и продолжается некоторое время.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95

Я сохранил эту сетку в файле .txt, назначив ее переменной файла следующим образом:

grid = open("grid.txt"  )

print(grid.readlines())

grid.close()

Когда я распечатываю содержимое сетки с grid.readlines(), всплывают некоторые проблемы: во-первых, он сохраняется как список длинной строки (т. Е. Каждая строка представляет собой одну запись списка, во-вторых, есть новая строка знак \n в конце каждой записи списка. Наконец, чтобы преобразовать эти данные в массив numpy в виде сетки, числа не могут начинаться с нуля. Т.е. 02 во втором столбце первого ряда должно быть 2 .

Я довольно новичок в numpy. Есть ли способ преобразовать эти данные в массив numpy, который избавил бы меня от необходимости вручную вносить отредактированную версию в мой код? python я могу прочитать о файлах csv или excel.

Лучший день для всех вас:)

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Вы можете использовать pd.read_csv() следующим образом:

my_array = pd.read_csv('test.txt', sep=' ', engine='python', header=None).values

Выход:

[[ 8  2 22 97 38 15  0 40  0 75  4  5  7 78 52 12 50 77 91  8]
 [49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48  4 56 62  0]
 [81 49 31 73 55 79 14 29 93 71 40 67 53 88 30  3 49 13 36 65]
 [52 70 95 23  4 60 11 42 69 24 68 56  1 32 56 71 37  2 36 91]
 [22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80]
 [24 47 32 60 99  3 45  2 44 75 33 53 78 36 84 20 35 17 12 50]
 [32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70]
 [67 26 20 68  2 62 12 20 95 63 94 39 63  8 40 91 66 49 94 21]
 [24 55 58  5 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72]
 [21 36 23  9 75  0 76 44 20 45 35 14  0 61 33 97 34 31 33 95]]
1 голос
/ 27 апреля 2020

Вы можете использовать только Numpy, не прибегая к Pandas. Код для этого:

tbl = np.fromfile('Input.txt', sep=' ', dtype='i4').reshape(-1, 20)

Нет необходимости отбрасывать лидирующие нули самостоятельно. Numpy делает это за вас.

1 голос
/ 27 апреля 2020

Некоторые примечания:

  1. Убедитесь, что вы используете open() с ключевым словом with. Ссылка здесь .

Рекомендуется использовать ключевое слово with при работе с объектами файла. Преимущество заключается в том, что файл правильно закрывается после завершения его набора, даже если в какой-то момент возникает исключение.

Вы можете использовать str.splitlines() для достижения этой цели.
with open('file.txt') as f:
    lines = f.read().splitlines()

print(lines)

Выходы:

['08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08', '49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00', '81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65', '52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91', '22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80', '24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50', '32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70', '67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21', '24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72', '21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95']

import numpy as np

file = np.loadtxt('file.txt')
print(file)
array([[ 8.,  2., 22., 97., 38., 15.,  0., 40.,  0., 75.,  4.,  5.,  7.,
        78., 52., 12., 50., 77., 91.,  8.],
       [49., 49., 99., 40., 17., 81., 18., 57., 60., 87., 17., 40., 98.,
        43., 69., 48.,  4., 56., 62.,  0.],
       [81., 49., 31., 73., 55., 79., 14., 29., 93., 71., 40., 67., 53.,
        88., 30.,  3., 49., 13., 36., 65.],
       [52., 70., 95., 23.,  4., 60., 11., 42., 69., 24., 68., 56.,  1.,
        32., 56., 71., 37.,  2., 36., 91.],
       [22., 31., 16., 71., 51., 67., 63., 89., 41., 92., 36., 54., 22.,
        40., 40., 28., 66., 33., 13., 80.],
       [24., 47., 32., 60., 99.,  3., 45.,  2., 44., 75., 33., 53., 78.,
        36., 84., 20., 35., 17., 12., 50.],
       [32., 98., 81., 28., 64., 23., 67., 10., 26., 38., 40., 67., 59.,
        54., 70., 66., 18., 38., 64., 70.],
       [67., 26., 20., 68.,  2., 62., 12., 20., 95., 63., 94., 39., 63.,
         8., 40., 91., 66., 49., 94., 21.],
       [24., 55., 58.,  5., 66., 73., 99., 26., 97., 17., 78., 78., 96.,
        83., 14., 88., 34., 89., 63., 72.],
       [21., 36., 23.,  9., 75.,  0., 76., 44., 20., 45., 35., 14.,  0.,
        61., 33., 97., 34., 31., 33., 95.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...