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

如何将形状为[1953,949,13]的3D Numpy数组写入CSV文件?

解决方案:将3D NumPy数组写入CSV,每行对应一个2D切片

针对你需要把形状为[1953,949,13]的3D数组写入CSV,每行对应一个[949,13]的2D子数组的需求,这里提供几种实用的实现方式,你可以根据场景选择:

方法一:将2D子数组展平为单行(最简洁高效)

这种方式把每个2D子数组直接展平成1D序列,每行存储展平后的所有元素,是最适合数据存储的方案,读写效率都很高。

import numpy as np

# 替换成你的实际3D数组
arr_3d = np.random.rand(1953, 949, 13)

# 打开CSV文件写入
with open('3d_array_output.csv', 'w', newline='') as csv_file:
    for slice_2d in arr_3d:
        # 将2D切片展平为1D,转成逗号分隔的字符串
        flattened_row = ','.join(map(str, slice_2d.flatten()))
        csv_file.write(f"{flattened_row}\n")

读取还原方法

如果你之后需要把CSV还原回3D数组,可以这样做:

restored_arr = []
with open('3d_array_output.csv', 'r') as csv_file:
    for line in csv_file:
        # 分割字符串并转成数值,重塑为原2D形状
        slice_2d = np.array(line.strip().split(','), dtype=np.float64).reshape(949, 13)
        restored_arr.append(slice_2d)
restored_arr = np.array(restored_arr)
# 验证形状:应该输出 (1953, 949, 13)
print(restored_arr.shape)

方法二:保留2D子数组的结构(可读性更强)

如果希望每行能直观反映原2D子数组的行结构,可以用分号分隔2D子数组的每一行,逗号分隔元素。这种方式可读性更好,但读写效率略低于方法一。

import numpy as np

arr_3d = np.random.rand(1953, 949, 13)

with open('3d_array_structured.csv', 'w', newline='') as csv_file:
    for slice_2d in arr_3d:
        # 先把2D子数组的每一行转成逗号分隔的字符串,再用分号连接所有行
        structured_row = ';'.join(','.join(map(str, row)) for row in slice_2d)
        csv_file.write(f"{structured_row}\n")

对应读取方法

restored_arr = []
with open('3d_array_structured.csv', 'r') as csv_file:
    for line in csv_file:
        # 先按分号分割出2D子数组的每一行,再按逗号分割元素
        rows = [np.array(row.split(','), dtype=np.float64) for row in line.strip().split(';')]
        slice_2d = np.vstack(rows)
        restored_arr.append(slice_2d)
restored_arr = np.array(restored_arr)
print(restored_arr.shape)

用np.savetxt的替代方案

np.savetxt确实只支持1D或2D数组,但我们可以循环遍历3D数组的每个2D切片,将其展平为1D后再调用np.savetxt写入,适合对精度控制有要求的场景:

import numpy as np

arr_3d = np.random.rand(1953, 949, 13)

with open('3d_array_savetxt.csv', 'w') as csv_file:
    for slice_2d in arr_3d:
        # 把展平后的1D数组转成2D的一行,让savetxt可以处理
        np.savetxt(csv_file, slice_2d.flatten()[np.newaxis, :], delimiter=',', fmt='%.6f')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:54