2017-02-04 139 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]我收到[,我需要輸出爲第一載體,它是99.25的第1個要素。

我嘗試了幾種使用numpy的方法,並將文本文件寫入CSV但沒有任何效果,請您幫助我解決此問題。您可以通過以下鏈接訪問文本文件,讓您瞭解其結構。 text.txt

+2

當你說'for vector in f'時,'vector'變量傳遞給你的代碼不是一個向量,而是整個文件的一行(作爲一個字符串)。你想做一些類似'for line in f'的代碼,並在循環中編寫代碼將每行分割成感興趣的令牌(例如使用正則表達式和/或'str.split()')。然後確保在使用它們填充數組之前將這些標記轉換爲數字值。 – dhrumeel

+0

感謝您的迅速響應。 vector的內容與我的文章[99.25,........ 0]中所描述的一樣,但正如你所說的,它被解析爲字符串而不是數組。但有沒有比reg-expression更簡單的方法? – Mohannad

+0

如果行符合樣本,您可以從行中去掉sqare括號,並在逗號空格和int()中分隔出來的所有列表元素。說得通? – Dilettant

回答

0

一個字符串開始,你需要做以下步驟,從它那裏得到的數字的列表:

  1. 使用strip擺脫[]
  2. 使用split(",")字符串在每一個逗號分開,並創建一個字符串列表
  3. 使用地圖(浮點,矢量),將其轉換爲浮動
  4. 使用的目錄列表()獲取實際列表而不是映射對象

然後,您應該可以將其放入您的numpy矩陣中。如果使用numpy,則不需要使用map(float, vector),因爲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: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 

我們讀到的內容到f中,在空間分割,並將其附加到new_list,然後映射在形成的矩陣中的每個字符串行上,並將其追加到final_list中,這會給你你想要的矩陣。