【问题标题】:Converting matrix-like string into matrix将类似矩阵的字符串转换为矩阵
【发布时间】:2017-02-13 22:35:13
【问题描述】:

我想将 .txt 文件中的字符串转换为可以在我的代码中使用的实际矩阵。 .txt 文件如下所示:

Version:1

Matrix1
[ 0.83568616  2.15352694 -4.4027591  -1.74058247 -0.42605484 -0.21766954]
[-1.0363443  -1.07584464  0.67931046  1.82348912  1.71141435 -0.40177167]
[-0.49192281  0.83897739 -0.97685038  1.3442258   1.91058796 -0.46493662]
[ 0.42825634 -0.58257726  2.0370751  -1.11937523 -3.81475336  2.66557629]

我尝试了不同的方法,但这是我目前拥有的:

f = open("C:/Users/Username/Desktop/Output_data/output_data1.txt", "r")
string1 = [x.strip() for x in f.readlines()]
string1 = string1[3:7]
Matrix1 = np.array(string1)
for elem in Matrix1:
    elem = float(elem)

这不起作用,因为 Matrix1 的 (elem) 是一个字符串(包括括号)。

有没有一种简单的方法可以将其转换为我可以使用的矩阵?

【问题讨论】:

  • 你可以只取每一行L,剪掉括号L[1:-1]并将它们分成“单词”L[1:-1].split()每个单词你都可以转换成浮动等。

标签: python python-3.x numpy matrix text


【解决方案1】:

代码的开始...

f = open("C:/Users/Username/Desktop/Output_data/output_data1.txt", "r")
string1 = [x.strip() for x in f.readlines()]
string1 = string1[3:7]

到目前为止一切顺利,现在我们想做一些不同的事情,使用你的风格,可以这样写

# strip the [] brackets
string1 = [x[1:-1] for x in string1]

# data is a list of lists of floating point numbers
data = [[float(f) for f in x.split()] for x in string1]

# a list of lists is almost an array, the final step is
Matrix1 = np.array(data)

总之

mat = np.array([[float(x) for x in l.strip()[1:-1].split()] for l in f.readlines()[3:7]])

【讨论】:

    【解决方案2】:

    numpy.matrix 接受字符串作为参数,但格式特殊,即没有括号,换行符应该是分号,所以如果你删除方括号并用; 替换换行符,你可以使用numpy.matrix 来阅读它们:

    s = """[ 0.83568616  2.15352694 -4.4027591  -1.74058247 -0.42605484 -0.21766954]
    [-1.0363443  -1.07584464  0.67931046  1.82348912  1.71141435 -0.40177167]
    [-0.49192281  0.83897739 -0.97685038  1.3442258   1.91058796 -0.46493662]
    [ 0.42825634 -0.58257726  2.0370751  -1.11937523 -3.81475336  2.66557629]"""
    ​
    import numpy as np    ​
    mat = np.matrix(s.replace('[', '').replace(']', '').replace('\n', ';'))
    ​
    mat
    # matrix([[ 0.83568616,  2.15352694, -4.4027591 , -1.74058247, -0.42605484, -0.21766954],
    #         [-1.0363443 , -1.07584464,  0.67931046,  1.82348912,  1.71141435, -0.40177167],
    #         [-0.49192281,  0.83897739, -0.97685038,  1.3442258 ,  1.91058796, -0.46493662],
    #         [ 0.42825634, -0.58257726,  2.0370751 , -1.11937523, -3.81475336, 2.66557629]])
    

    对于您的情况,您可以尝试逐行加载数据(可能有更好的方法)并将它们添加到空矩阵中:

    string1 = [x.strip() for x in f.readlines()]
    string1 = string1[3:7]
    mat = np.empty((0, 6))
    for string in string1:
        mat = np.vstack([mat, np.matrix(string.strip('[]'))])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2014-01-14
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多