Подтвердить что ты не робот

Чтение неравномерных данных из файла в массив с помощью NumPy

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

33 3
 46 12
23 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 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 будет

массив ([46, 12])

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

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

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

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

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

currentArray = loadtxt ('scienceVertices.txt', userows = (строка))

4b9b3361

Ответ 1

Здесь однострочный:

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

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

Ответ 2

for line in textfile:
  a = np.array([int(v) for v in line.strip().split(" ")])
  # Work on your array

Ответ 3

Вы также можете использовать 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 в других ответах.

Ответ 4

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