当前位置: 代码迷 >> python >> 将类似矩阵的字符串转换为矩阵
  详细解决方案

将类似矩阵的字符串转换为矩阵

热度:44   发布时间:2023-06-13 16:48:11.0

我想将.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的(元素)是字符串(包括方括号)。

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

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('[]'))])

代码的开始...

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]])
  相关解决方案