You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TXT格式矩阵转换为numpy矩阵时出现字符串转float报错如何解决

问题解决方法

错误根因

  • 核心问题是你写的正则表达式捕获组规则存在缺陷:[0-9e+.]+没有包含科学计数法里的负号-,当匹配到带负指数的数值(例如8.259e-004)时,正则会在匹配到e之后停止,最终拿到的字符串是不完整的8.259e,无法转为float类型。
  • 另外你粘贴的代码存在缩进错误:with open代码块下的data = file.read()没有缩进,运行时会抛出语法错误,且代码未导入re模块也会导致运行报错。

修复方案

1. 修正正则表达式

把原来的数值捕获规则替换为可完整匹配科学计数法(含正负号、大小写E)的规则:([\d.eE+-]+)
如果需要更严谨的匹配避免误抓,也可以用针对性更强的规则:(-?\d+\.?\d*[eE][+-]?\d+)

2. 完整可运行代码

import re
import numpy as np

n = 6567
# 直接初始化numpy矩阵,比Python原生列表更省内存、后续操作更方便
kmat = np.zeros((n, n), dtype=np.float64)

with open("stiff_matrix.txt", "r", encoding="utf-8") as file:
    data = file.read()

# 修正后的正则匹配规则
for x, y, value in re.findall(r'\[\s*(\d+),\s*(\d+)\s*\]: ([\d.eE+-]+)', data):
    x_idx = int(x) - 1
    y_idx = int(y) - 1
    kmat[x_idx][y_idx] = float(value)

3. 大文件优化方案

如果你的矩阵文件体积过大,一次性读取全部内容会占用过高内存,可以改为逐行读取解析:

import re
import numpy as np

n = 6567
kmat = np.zeros((n, n), dtype=np.float64)
# 预编译正则,提升大文件解析效率
pattern = re.compile(r'\[\s*(\d+),\s*(\d+)\s*\]: ([\d.eE+-]+)')

with open("stiff_matrix.txt", "r", encoding="utf-8") as file:
    for line in file:
        for x, y, value in pattern.findall(line):
            x_idx = int(x) - 1
            y_idx = int(y) - 1
            kmat[x_idx][y_idx] = float(value)

4. 可选异常捕获

如果担心文件中存在异常格式的数值,可以增加异常捕获避免程序中断,同时定位问题位置:

import re
import numpy as np

n = 6567
kmat = np.zeros((n, n), dtype=np.float64)
pattern = re.compile(r'\[\s*(\d+),\s*(\d+)\s*\]: ([\d.eE+-]+)')

with open("stiff_matrix.txt", "r", encoding="utf-8") as file:
    for line_num, line in enumerate(file, 1):
        for x, y, value in pattern.findall(line):
            try:
                x_idx = int(x) - 1
                y_idx = int(y) - 1
                kmat[x_idx][y_idx] = float(value)
            except ValueError as e:
                print(f"第{line_num}行存在异常数值:{value},错误信息:{e}")

内容的提问来源于stack exchange,提问作者Md Salem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:54:03