如何用NumSharp读取含不同数据类型的npz文件?三种尝试均遇阻
解决NumSharp读取含不同数据类型NPZ文件的问题
给定的NPZ文件包含两个NPY数组:
faces.npy:float64类型,形状为12×15neighbors.npy:int64类型,形状为12×3
之前的尝试因指定单一泛型类型导致无法匹配异类型数组,重复加载又触发文件占用问题,以下是正确的读取方案:
直接加载整个NPZ文件为NPZFile对象,再分别取出数组并转换为对应数据类型,只需打开一次文件即可解决所有问题:
// 加载完整NPZ文件,无需指定单一泛型 using var npz = np.Load_Npz(@"D:\dnns\ifcnet\test\wall\IFCWALL.43.npz"); // 将faces数组转为double[,](对应float64) var faces = npz["faces.npy"].ToArray<double>(); // 将neighbors数组转为long[,](对应int64,C#中Int64等价于long) var neighbors = npz["neighbors.npy"].ToArray<long>();
关键说明
- 不指定泛型的
np.Load_Npz()会返回包含所有数组的NPZFile实例,适配不同类型的数组。 - 通过
ToArray<T>()将NumSharp数组转换为C#原生多维数组,类型对应关系:float64→double,int64→long/Int64。 - 使用
using语句自动释放文件流,彻底避免文件被占用的问题。
另外,第二次尝试中的In[,]属于笔误,即使修正为Int64[,],也会因类型不匹配导致faces为null——浮点类型数组无法直接转为整数类型数组。
内容的提问来源于stack exchange,提问作者Flash2022
相关产品推荐
相关产品推荐

