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

如何将文件中的数组字符串转换为3D数组?

问题:字符串转3D数组失败

我从文件里读了一段数组格式的字符串,想转成3D数组,但试了各种方法都不行。我用的代码如下:

with open(output_dir/f"{input_reg}.txt", "r", encoding='utf-8') as file1:
    Fa = file1.read()
    Fa = np.frombuffer(Fa, dtype=float)
    Fd = json.loads(Fa)

待转换的数组字符串示例:

[[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]]

问题原因

  1. np.frombuffer用法错误:这个函数专门解析二进制字节流,不能直接处理文本字符串,用它处理读取到的内容会完全打乱数据格式。
  2. 字符串格式不合法:原始字符串是多个独立的JSON数组直接拼接(比如[[...]]后直接跟[[...]]),没有分隔符也没有外层数组包裹,不符合JSON规范,json.loads自然无法解析。

解决方法

先修复字符串格式,转成合法的JSON数组,再解析转换:

import json
import numpy as np
import re
from pathlib import Path

# 替换成你的实际路径和文件名
output_dir = Path("your_output_directory")
input_reg = "your_file_name"

with open(output_dir / f"{input_reg}.txt", "r", encoding='utf-8') as file1:
    raw_str = file1.read()
    # 给相邻数组之间添加逗号分隔符
    fixed_str = re.sub(r']]\[\[', ']], [[', raw_str)
    # 给整体加上外层数组括号,变成合法JSON格式
    fixed_str = f"[{fixed_str}]"
    # 解析为Python列表
    data_list = json.loads(fixed_str)
    # 转换为3D numpy数组
    final_array = np.array(data_list)
    # 查看数组形状,确认结构正确
    print(final_array.shape)

这段代码会将原始字符串转换成形状为(8, 2, ...)的3D数组,每个元素包含一个3×3的子数组和一个3元素的子数组,和原始数据结构完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:23