Чтение неоднородных данных из файла в массив с помощью NumPy - PullRequest
13 голосов
/ 12 февраля 2011

Предположим, у меня есть текстовый файл, который выглядит следующим образом:

33 3
46 12
23 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 2411 24 12 24 13 24 14 24 15 24 16 25 14 25 15 25 16 26 16 27 16 28 16 29 16
33 17 33 18 33 19 34 17 34 18 34 19 35 17 35 18 35 19 36 19
41 32 41 33 42 32 42 33

Я хотел бы прочитать каждую строку в отдельный массив целых чисел, как в (псевдокод):

for line in textfile:  
    currentArray = firstLine  
    do stuff with currentArray

где вв первой итерации currentArray будет

массив ([33, 3])

, а во второй итерации currentArray будет

array ([46, 12])

до последней итерации, когда currentArray будет

array ([41, 32, 41, 33, 42, 32, 42, 33])

В основном, я хотел бы иметь функциональность функции numpy loadtxt:

currentArray = loadtxt ('scienceVertices.txt', usecols= ())

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

currentArray = loadtxt ('scienceVertices.txt', userows = (line))

Ответы [ 4 ]

14 голосов
/ 12 февраля 2011

Вот одна строка:

arrays = [np.array(map(int, line.split())) for line in open('scienceVertices.txt')]

arrays - список массивов numpy

6 голосов
/ 12 февраля 2011
for line in textfile:
  a = np.array([int(v) for v in line.strip().split(" ")])
  # Work on your array
3 голосов
/ 13 февраля 2011

Вы также можете использовать numpy.fromstring()

for line in f:
    a = numpy.fromstring(line.strip(), dtype=int, sep=" ")

или - если вам нужна полная гибкость - даже numpy.loadtxt():

for line in f:
    a = numpy.loadtxt(StringIO.StringIO(line), dtype=int)

Для длинных строк это решение будет работать лучше, чем код Python в других ответах.

2 голосов
/ 12 февраля 2011
f = open("file", "r")
array = []
line = f.readline()
index = 0
while line:
    line = line.strip("\n")
    line = line.split()
    array.append([])
    for item in line:
        array[index].append(int(item))
    line = f.readline()
    index += 1
f.close()

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