问题描述
我想将.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的(元素)是字符串(包括方括号)。
有没有简单的方法可以将其转换为我可以使用的矩阵?
1楼
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('[]'))])
2楼
代码的开始...
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]])