2014-01-05 2 views
0

У меня есть текстовый файл и содержит следующее:Python Numpy массив чтение из текстового файла в 2D массив

-11.3815 -14.552 -15.7591 -18.5273 -14.6479 -12.7006 -13.9164 -19.8172 -22.951 -16.5832 
-16.555 -17.6044 -15.9577 -15.3363 -17.7223 -18.9881 -22.3789 -24.4881 -16.6685 -17.9475 
-18.2015 -15.2949 -15.5407 -18.8215 -24.5371 -17.0939 -15.3251 -13.1195 -13.3332 -19.3353 
-14.6149 -14.5243 -15.1842 -15.5911 -14.3217 -15.4211 

с большим количеством данных внутри этого. Я хочу прочитать это внутри 2D-массива. Я попробовал следующее:

with open('test.txt') as file: 
    array2d = [[float(digit) for digit in line.strip()] for line in file] 

И, кажется, просто получать:

ValueError: could not convert string to float: - 

Любая идея, как решить эту проблему?

+0

Количество элементов в каждой строке не является постоянной в файле. Вы не можете получить массив numpy из таких данных. –

ответ

7

Вы должны использовать

split() 

вместо

strip() 

потому что strip() возвращает строку, так что вы итерация каждого символа этой строки. split() верните список, вот что вам нужно. Читайте больше в Python docs.

Код:

with open('sample.txt') as file: 
    array2d = [[float(digit) for digit in line.split()] for line in file] 

print array2d 

Выход:

[[-11.3815, -14.552, -15.7591, -18.5273, -14.6479, -12.7006, -13.9164, -19.8172, -22.951, -16.5832], [-16.555, -17.6044, -15.9577, -15.3363, -17.7223, -18.9881, -22.3789, -24.4881, -16.6685, -17.9475], [-18.2015, -15.2949, -15.5407, -18.8215, -24.5371, -17.0939, -15.3251, -13.1195, -13.3332, -19.3353], [-14.6149, -14.5243, -15.1842, -15.5911, -14.3217, -15.4211]] 
+0

Эй, спасибо! Есть ли способ определить, является ли массив 2D или 3D внутри python? То есть «Массив 2D» – Phorce

Смежные вопросы