首页 > 解决方案 > 将txt文件中的矩阵转换为numpy形式的矩阵时出错

问题描述

我正在从像这个样本这样的 txt 文件中提取矩阵(它很大):[ 1, 1]: 3.890e-004 [ 1, 2]: 0.000e+000 [ 1, 3]: 0.000e+000 [ 1 , 4]: 0.000e+000 [ 1, 5]: 0.000e+000 [ 1, 6]: 0.000e+000 [ 1, 7]: 9.732e-005 [ 1, 8]: 0.000e+000 [ 1 , 9]: 0.000e+000 [ 1, 10]: 0.000e+000 [ 1, 11]: 0.000e+000 [ 1, 12]: 0.000e+000 [ 1, 13]: 9.735e-005 [ 1 , 14]: 0.000e+000 [ 1, 15]: 0.000e+000 [ 1, 16]: 0.000e+000 [ 1, 17]: 0.000e+000 [ 1, 18]: 0.000e+000 [ 1 , 19]: 0.000e+000 [ 1, 20]: 0.000e+000 [ 1, 21]: 0.000e+000 [ 1, 22]: 0.000e+000 [ 1, 23]: 0.000e+000 [ 1 , 24]: 0.000e+000 [ 1, 25]: 0.000e+000 [ 1, 26]: 0.000e+000 [ 1, 27]: 0.000e+000 [ 1, 28]: 0.000e+000 [ 1 , 29]: 0.000e+000 [1, 30]: 0.000e+000 [1, 31]: 0.000e+000 [1, 32]: 0.000e+000 [1, 33]: 0.000e+000 [ 1, 34]: 0.000e+000 [ 1, 35]: 0.000e+000 [ 1, 36]: 0.000e+000 [ 1, 37]: 0.000e+000 [ 1, 38]: 0.000 e+000 [ 1, 39]: 0.000e+000 [ 1, 40]: 0.000e+000 [ 1, 41]: 0.000e+000 [ 1, 42]: 0.000e+000 [ 1, 43]: 0.000 e+000 ................................... …………………………………………………………………………………………………………………………………… ................................................ [ 6567,6562]: 0.000e+000 [6567,6563]: 0.000e+000 [6567,6564]: 0.000e+000 [6567,6565]: 0.000e+000 [6567,6566]: 0.000e+000 [ 6567,6567]:2.960e-020 使用下一个代码:..................................................... ................................... [6567,6562]:0.000e+ 000 [6567,6563]: 0.000e+000 [6567,6564]: 0.000e+000 [6567,6565]: 0.000e+000 [6567,6566]: 0.000e+000 [6567,6567]: 2.960e- 020 使用下一个代码:..................................................... ................................... [6567,6562]:0.000e+ 000 [6567,6563]: 0.000e+000 [6567,6564]: 0.000e+000 [6567,6565]: 0.000e+000 [6567,6566]: 0.000e+000 [6567,6567]: 2.960e- 020 使用下一个代码:

n=6567
with open("stiff_matrix.txt") as file:
data = file.read()

kmat = [[0 for _ in range(n)] for _ in range(n)]
for x, y, value in re.findall(r'\[\s*(\d+),\s*(\d+)\s*\]: ([0-9e+.]+)', data):
    if value :
        kmat[int(x)-1][int(y)-1] = float(value)

它一直告诉我:“无法将字符串转换为浮点数:8.259e”知道显示的文件是由另一个应用程序自动诱导的(其中没有人机界面)

标签: python

解决方案


8.259e是错误的数字表达。我猜你的意思是8.259。你可以通过下面的例子来解决它。

number = '8.259e'
number = float(number.strip('e'))
print(number)

你会得到输出8.259

而且您的正则表达式并不完全正确。您可以尝试r'\[\s*(\d+),\s*(\d+)\s*\]: (.*?) '再次匹配结果。

注意):我给出的正则表达式之间和'结尾之间有一个空格。

在您的示例中,3.890e在文件的第 1 行中匹配,但是,3.890e-004是预期的结果。


推荐阅读