2017-02-04 102 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中,这会给你你想要的矩阵。