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

C#使用NumSharp读取7GB超大.npy文件报算术溢出错误如何解决

C#读取7GB大型.npy文件溢出问题及解决办法

问题场景

我尝试在C#中读取大型.npy文件,使用的是NumSharp Nuget包。目标文件为7GB大小的交错float数组(float[][]),包含约100万条960维的向量。
注意:所用测试数据为Approximate Nearest Neighbors Large datasets的GIST数据。

初始实现及报错

原来的加载代码如下:

private static void ReadNpyVectorsFromFile(string pathPrefix, out List<float[]> candidates)
{
    var npyFilename = @$"{pathPrefix}.npy";
    
    var v = np.load(npyFilename);//NDArray
    
    candidates = v
        .astype(np.float32)
        .ToJaggedArray<float>()
        .OfType<float[]>()
        .Select(a =>
        {
            return a.OfType<float>().ToArray();
        })
        .ToList();
}

运行时抛出溢出异常:

Exception thrown: 'System.OverflowException' in NumSharp.dll 未处理的'System.OverflowException'类型异常出现在NumSharp.dll中,提示算术运算导致溢出。

解决办法

问题根因

NumSharp包本身存在大文件读取限制,读取GB级别的npy文件时内部计算数组长度会触发溢出。

推荐替代方案

可以先将原数据转换为.npz格式(可参考numpy的savez()方法实现转换),使用libnpy库完成读取,示例代码如下:

NPZInputStream npz = new NPZInputStream(npyFilename);
var keys = npz.Keys();
//var header = npz.Peek(keys[0]);
var t = npz.ReadFloat32(keys[0]);

Debug.Assert(t.DataType == DataType.FLOAT32);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:04