numpy.fromfile的count参数无效,无法读取指定行的问题求助
问题原因:对
np.fromfile的count参数理解有误 这不是numpy的bug,是你搞错了count参数的核心含义!
np.fromfile的count参数指定的是要读取的元素个数,而不是字节数。你之前写的count=(2*dim*8)是按字节数来计算的,而每个np.int64元素占8字节,这就导致你传入的count值远大于实际需要的元素数量——当count超过文件剩余元素总数时,numpy会自动读到文件末尾,所以你才会得到从第二行开始的所有内容。
修正后的代码
只需要把count参数改成你实际要读取的元素数量(比如读取1行就是dim=3个元素):
import numpy as np import os # To write X = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] X = np.asarray(X, dtype=np.int64) print("%s\n\n" % X) X.astype(np.int64).tofile('test.dat') # To read f = open('test.dat', "rb") n = 4 dim = 3 r = 1 # 偏移量计算是正确的:定位到第r行开头,每个元素8字节 f.seek(r * dim * 8, os.SEEK_SET) # count设为dim,读取1行(3个int64元素) data = np.fromfile(f, count=dim, dtype=np.int64).reshape(-1, dim) print("The Reading data is:\n %s\n" % data)
运行后输出就会符合预期:
The Reading data is: [[4 5 6]]
更便捷的替代方案
如果需要频繁随机访问二进制文件中的数组行,可以用np.memmap,它能直接把文件映射为numpy数组,像操作普通数组一样索引:
mmap_arr = np.memmap('test.dat', dtype=np.int64, shape=(4,3)) print(mmap_arr[1]) # 直接获取第二行,输出[4 5 6]
内容的提问来源于stack exchange,提问作者Medo
相关产品推荐
相关产品推荐

