2017-02-04 1 views
0

У меня есть текстовый файл содержит список (#lines = 1137) векторов (все равны размеру = 1137), я пытаюсь преобразовать этот список в 1137 * 1137 матрица. Я создал пустую матрицу с помощью numpy. Но проблема после того, когда я прочитал файл, используя следующий код, векторы рассматриваются как последовательность символов, а не в качестве вектора или массиваСоздание n * n матрицы из текстового файла содержит список списков в python

myMtrx = np.empty((1137,1137)) 
f = open("text.txt", "r") 
for vector in f: 
    print len(vector) 
    arrayF.append(vector.rstrip()) 

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

[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, ...., 0] 

так, когда я печатаю print arrayF[0][0] я получаю [, где мне нужно вывод, чтобы быть первым элементом 1-го вектора, который является 99,25.

Я пробовал несколько способов использования numpy и записывал текстовый файл в CSV, но ничего не работает, можете ли вы помочь мне решить эту проблему. Вы можете получить доступ к текстовому файлу по следующей ссылке, чтобы получить представление о его структуре. text.txt

+2

Когда вы говорите 'для вектора в f', то, что передается вашему коду в переменной' vector', не является вектором, а целым целым строком файла (в виде строки).Вы хотите сделать что-то вроде 'for line in f' и написать код внутри цикла, чтобы разделить каждую строку на интересующие маркеры (например, с использованием регулярных выражений и/или' str.split() '). Затем убедитесь, что вы конвертируете эти токены в числовые значения, прежде чем использовать их для заполнения массива. – dhrumeel

+0

Спасибо за быстрый ответ. Содержимое вектора описано в моем сообщении [99.25, ........ 0], но, как вы сказали, оно анализируется как строка не как массив. Но есть ли более простой метод, чем рег-выражение ??? – Mohannad

+0

Если строки привязаны к образцу, вы можете лишить квадратные скобки из строки и разделить на запятую и int() каждый элемент списка, выходящий из раздела. Имеет смысл? – Dilettant

ответ

0

Начиная со строки, вам необходимо выполнить следующие шаги, чтобы получить список номеров из него:

  1. Используйте strip, чтобы избавиться от []
  2. Использование split(",") разбить строку на каждой запятой и создать список строк
  3. Используйте карту (с плавающей точкой, вектор), чтобы преобразовать его в список поплавков
  4. Использование списка(), чтобы получить фактический список, а не сопоставленный объект.

Затем вы можете помещать это в свою матрицу numpy. Нет необходимости использовать map(float, vector), если использовать numpy, потому что numpy будет делать вывод, что они автоматически поплавают.

Вот пример кода:

myMtrx = np.empty((1137,1137)) 
f = open("text.txt", "r") 

for idx, vector in enumerate(f): 
    # vector = '[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, 0]' 
    vector = list(map(float, vector.strip("[]\n").split(","))) 
    myMtrx[idx ,:] = vector 
+0

Выполненный предложенный код, но получил следующую ошибку 'ValueError: invalid literal for float(): 17.6]' – Mohannad

+0

Ли первая строка в вашем файле заканчивается на 17.6? После него может появиться символ новой строки, который может вызвать проблему. Попробуйте добавить \ n внутри полосы() – bluprince13

+0

Спасибо, сейчас работает :) – Mohannad

1

Вы читаете строку из своего файла, которую нужно преобразовать в список. Решение, как этот может сделать трюк:

for line in f: 
    vector = line.strip("[]").split(",") 
    ... 
  • strip: удалить все символы «[]» от главной страницы и конца строки
  • split: преобразование строки для вывода списка, резка на каждом», "позиция
0

Я хотел бы сделать это:

f = open('first.txt').readlines() 
    f = [i.strip('\n') for i in f] 

    new_list = [] 
    final_list = [] 
    for i in f: 
     new_list.append(i.split(' ')) 

    for i in new_list: 
     final_list.append(map(int, i)) 

    print final_list 

мы читаем содержимое в е, разделить их на пространствах и добавить их к new_list, а затем карту над каждой строкой строки в сформированной матрице и добавьте ее в final_list, который даст вам нужную вам матрицу.

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