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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:08