从文本文件创建n * n矩阵包含python中的列表列表

时间:2017-02-04 21:54:59

标签: python list matrix vector

我有一个文本文件包含一个列表(#lines = 1137)的向量(所有大小相等= 1137),我试图将此列表转换为1137 * 1137矩阵。我用numpy创建了一个空矩阵。但是当我使用以下代码读取文件后,问题被视为一系列字符,而不是矢量或数组

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。

我尝试了几种使用numpy的方法,并将文本文件写入CSV但没有任何效果,请你协助我解决这个问题。您可以通过以下链接访问文本文件,让您了解其结构。 text.txt

3 个答案:

答案 0 :(得分:1)

您正在从文件中读取字符串,您需要转换为列表。像这样的解决方案可以解决这个问题:

for line in f:
   vector = line.strip("[]").split(",")
   ...
  • strip:删除" []"中的所有字符从字符串的开头和结尾
  • split:将字符串转换为列表,切割每个","位置

答案 1 :(得分:0)

从字符串开始,您需要执行以下步骤以从中获取数字列表:

  1. 使用strip摆脱[]
  2. 使用split(",")在每个逗号分割字符串并创建字符串列表
  3. 使用map(float,vector)将其转换为浮动列表
  4. 使用list()获取实际列表而不是映射对象
  5. 然后你应该把它放到你的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
    

答案 2 :(得分: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,这将为您提供所需的矩阵。