CSharp: Failed to read LARGE .npy file. Exception is quot;NumSharp.dll Arithmetic operation resulted in an overflow.quot;(CSharp:无法读取大型.npy文件。异常是Quot;NumSharp.dll算术运算导致溢出。Quot;)
问题描述
我正在尝试读取CSharp中的一个大.npy文件。 为此,我尝试使用NumSharpNuget。
该文件为7 GB交错浮点数组(Float[][])。它有大约100万个向量,每个向量是960维。
注意: 更具体地说,我使用的数据是来自以下链接的GISTApproximate Nearest Neighbors Large datasets。
以下是我用来加载数据的方法,但由于出现异常而失败:
例外情况是:
引发异常:NumSharp.dll和 中发生了类型为"System.Overflow Exception"的未经处理的异常 NumSharp.dll算术运算导致溢出。
如何解决此问题?
更新
如果文件太大,NumSharp包有一个限制。 阅读下面的评论/答案以获得更多解释。 我添加了一个带有解决方法建议的答案
但是, 一个很好的替代方法是将数据保存为.npz(请参阅:numpy.savez()),然后使用以下包即可完成此工作:https://github.com/matajoh/libnpy
代码示例:
推荐答案
我看到您已经找到了解决办法。如果您现在想知道问题的原因,这是因为.NET中Array
类的限制。
np.load(string path)
方法被定义为here,该方法又调用np.load(Stream stream)
。
bytes
是您的日期类型的大小。由于您使用的是float
,因此此值为4
。和shape
是矢量的数量和形状。
接下来,我们来看看readValueMatrix
method。
bytes * total
的一维byte
数组。这里,bytes
是4,total
是向量的数量乘以所有维度的大小。
然而,在.NET中,byte
数组在任何给定维度上的最大索引是0X7FFFFFC7
,即2147483591
,如文档here所示。我还没有下载您的数据,但我猜它已经足够大了,bytes * total > 2147483591
。请注意,如果要使用NumSharp将数据写回NPY文件,则在writeValueMatrix
method中也会遇到同样的问题。
这篇关于CSharp:无法读取大型.npy文件。异常是&Quot;NumSharp.dll算术运算导致溢出。&Quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!