【问题标题】:Read a matrix from a .txt file?从 .txt 文件中读取矩阵?
【发布时间】:2018-03-05 16:20:15
【问题描述】:

我有一个txt文件,可以显示为:

10 1:0.870137474304 2:0.722354071782 3:0.671913562758 
11 1:0.764133072717 2:0.4893616821 3:0.332713609364 
20 1:0.531732713984 2:0.0967819558321 3:0.169802773309 

然后我想读取文件并形成一个矩阵形式为:

[[10 0.870137474304 0.722354071782 0.671913562758 ]
[11 0.764133072717 0.4893616821   0.332713609364 ]
[20 0.531732713984 0.0967819558321 0.169802773309]]

我知道如何拆分除第一列以外的元素。第一列怎么处理?

matrix = []

lines = open("test.txt").read().split("\n")  # read all lines into an array
for line in lines:
    array [0] = line.split(" ")[0]
    # Split the line based on spaces and the sub-part on the colon
    array = [float(s.split(":")[1]) for s in line.split(" ")]  

    matrix.append(array)

print(matrix)

【问题讨论】:

    标签: python arrays csv readfile


    【解决方案1】:

    你可以使用正则表达式:

    import re
    data = [map(float, re.findall('(?<=:)[\d\.]+|^\d+', i.strip('\n'))) for i in open('filename.txt')]
    

    输出:

    [[10.0, 0.870137474304, 0.722354071782, 0.671913562758], [11.0, 0.764133072717, 0.4893616821, 0.332713609364], [20.0, 0.531732713984, 0.0967819558321, 0.169802773309]]
    

    编辑:用data 创建一个numpy 数组:

    import numpy as np
    import re
    data = [map(float, re.findall('(?<=:)[\d\.]+|^\d+', i.strip('\n'))) for i in open('filename.txt')]
    new_data = np.array(data)
    

    输出:

    array([[ 10.        ,   0.87013747,   0.72235407,   0.67191356],
       [ 11.        ,   0.76413307,   0.48936168,   0.33271361],
       [ 20.        ,   0.53173271,   0.09678196,   0.16980277]])
    

    【讨论】:

    • 输出是一个列表吧?我可以将其更改为 numpy 数组吗?
    • @ChenJi 输出是一个列表。但是,我还添加了一个从data 创建numpy 数组的解决方案。
    • 在python3中还能用吗?输出似乎是地址
    【解决方案2】:

    这是将数据提取为numpy 数组的一种方法:

    df = pd.read_csv('myfile.csv', header=None)
    
    for col in range(1, 4):
        df[col] = df[col].apply(lambda x: float(x.split(':')[1]))
    
    res = df.values
    
    # [[ 10.           0.87013747   0.72235407   0.67191356]
    #  [ 11.           0.76413307   0.48936168   0.33271361]
    #  [ 20.           0.53173271   0.09678196   0.16980277]]
    

    【讨论】:

      【解决方案3】:

      对于python初学者

      富有表现力的版本:

      import csv
      matrix = []
      with open('data.csv') as csvfile:
          reader = csv.reader(csvfile, delimiter=' ')
          for row in reader:
              cleaned_row = [col.split(':')[-1] for col in row]
              matrix.append(cleaned_row)
      print matrix
      

      使用列表推导

      rows = [row for row in open('csvfile.csv').read().split('\n')]
      matrix = [[col.split(':')[-1] for col in row.split(' ')] for row in rows]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2017-10-12
        • 2015-01-30
        • 1970-01-01
        相关资源
        最近更新 更多