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

跨程序读取CSV时如何还原数组列表的原始格式?

如何将CSV读取的Biases还原为原始数组列表格式?

我明白你的问题——你用NumPy生成了一个由二维数组组成的列表(biases),但存成CSV再读出来后,原来的数组结构就丢了,没法直接用。问题出在CSV是表格型的文本格式,它只能存储一维的行数据,没法保留多维数组的形状信息,所以我们需要在存储时做扁平化处理,读取时再把数据重新reshape回原来的结构。

下面给你两种解决方案,一种是基于CSV的(如果你必须用CSV存储),另一种是更简便的NumPy原生格式方案:


方案1:用CSV存储并还原

第一步:正确存储biases

存储时,我们需要把每个二维数组扁平化(转成一维),这样才能写入CSV的一行中。因为你已经知道sizes的结构,所以不需要额外存储形状信息,后面可以用sizes[1:]来推导每个数组的形状:

import csv
import numpy as np

sizes = [784, 30, 10]
biases = [np.random.randn(y, 1) for y in sizes[1:]]

# 存储:将每个bias数组扁平化后写入一行
with open('biases.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for b in biases:
        # 把二维数组转成一维列表写入
        writer.writerow(b.flatten().tolist())

第二步:读取并还原原始格式

读取时,按行读取每一行的字符串数据,转成float数组后,再用sizes[1:]中的对应维度reshape回(y,1)的结构:

import csv
import numpy as np

sizes = [784, 30, 10]
biases = []

with open('biases.csv', 'r') as f:
    reader = csv.reader(f)
    # 遍历每一行,对应一个原始的bias数组
    for idx, row in enumerate(reader):
        # 把字符串转成float数组,再reshape回目标形状
        flat_bias = np.array([float(val) for val in row])
        original_bias = flat_bias.reshape(sizes[1:][idx], 1)
        biases.append(original_bias)

# 验证形状是否正确
for b in biases:
    print(b.shape)
# 输出应该是:
# (30, 1)
# (10, 1)

方案2:用NumPy原生格式存储(更推荐)

如果你不需要用CSV,建议直接用NumPy的.npz格式存储,它会自动保留数组的形状、数据类型等信息,操作更简单:

存储代码

import numpy as np

sizes = [784, 30, 10]
biases = [np.random.randn(y, 1) for y in sizes[1:]]

# 用npz存储多个数组
np.savez('biases.npz', *biases)

读取还原代码

import numpy as np

# 加载npz文件
loaded_data = np.load('biases.npz')
# 按顺序取出数组,还原成原始列表
biases = [loaded_data[f'arr_{i}'] for i in range(len(loaded_data))]

# 验证形状
for b in biases:
    print(b.shape)

这种方法完全不需要手动处理形状转换,适合存储NumPy数组的场景,避免了CSV的格式限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:39