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

如何导入元素为Numpy数组格式的CSV并转换为三维Numpy数组?

Numpy读取数组格式CSV转三维数组实现方案

问题场景

多款软件包兼容性不足时,导出的CSV文件会存储类Numpy数组格式的内容,使用genfromtxt('Input.csv',delimiter=',',dtype=None,encoding=None)读取后会得到字符串组成的二维数组,示例结构:

[['[4 3 2 1]' '[1 1 0 0]']
 ['[1 3 4 2]' '[0 1 1 0]']]

需要将该字符串数组转换为数值类型的三维Numpy数组,目标结构:

[[[4 3 2 1] [1 1 0 0]]
 [[1 3 4 2] [0 1 1 0]]]

实现代码

方法1:基础字符串处理(适合格式规范的文件)

逻辑简单无额外依赖,小数据量场景下直接可用:

import numpy as np

# 读取文件得到字符串二维数组
arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None)

# 逐元素去除方括号、拆分空格分隔的数字转整型,自动重构三维维度
arr_3d = np.array([
    [list(map(int, cell.strip('[]').split())) for cell in row]
    for row in arr_str
])

方法2:正则提取(适配格式杂乱的文件)

如果CSV中存在多余空格、换行、特殊符号等格式问题,用正则提取数字容错性更高:

import numpy as np
import re

arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None)

# 正则匹配单元格内所有数字,忽略无关符号
arr_3d = np.array([
    [list(map(int, re.findall(r'\d+', cell))) for cell in row]
    for row in arr_str
])

方法3:向量化操作(适合大数据量文件)

用Numpy内置的字符串向量化操作替代Python层循环,处理万行以上大文件时效率提升明显:

import numpy as np

arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None)

# 批量去除方括号、统一空格分隔格式
cleaned_arr = np.char.replace(np.char.strip(arr_str, '[]'), '  ', ' ')
# 扁平化后批量转数值,再按原二维数组的维度重构为三维数组
arr_3d = np.array(
    [np.fromstring(cell, sep=' ', dtype=int) for cell in cleaned_arr.flatten()]
).reshape(*arr_str.shape, -1)

结果校验

处理完成后可通过两个简单操作确认结果正确:

  • 执行print(arr_3d.shape),示例数据会输出(2, 2, 4),对应三维数组结构
  • 执行print(arr_3d.dtype),会输出整型类型(如int32/int64),确认已从字符串转为数值类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:18:16