我使用自定义数据类型,例如datatype = np.dtype('({:n},{:n})f4'.format(10000,100000))
从二进制文件中读取数据
np.fromfile(filename, dtype=datatype)
但是,使用np.dtype定义数据类型会给大型数据集带来一个错误,如上面的示例数据类型所示:
ValueError: invalid shape in fixed-type tuple: dtype size in bytes must fit into a C int
初始化这样大小的数组没有问题:a=np.zeros((10000,100000))
。所以我的问题是:这个限制是从哪里来的,我怎样才能摆脱它?当然,我可以使用循环一次读取块,但也许有一个更优雅的方式?
发布于 2015-10-20 16:15:27
当您指定一个dtype的'(M, N)f4'
时,您实际上是在指定输出数组的最后两个维度。
np.zeros(5, np.dtype('(6, 7)f4')).shape
# (5, 6, 7)
通过简单地将数据读入一维数组,然后将其重塑到所需的形状,您可以获得相同的结果:
x = np.fromfile(filename, np.float32).reshape(-1, 10000, 100000)
https://stackoverflow.com/questions/33239714
复制相似问题