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

如何仅加载numpy二进制文件中的连续切片元素?

读取二进制numpy数组的指定连续切片内容

要直接读取二进制文件中数组的[a:b]切片,核心是利用文件的偏移量定位和指定读取数量,下面是两种实用方法:

方法一:直接用np.fromfile的参数实现

np.fromfile本身支持offset(文件偏移字节数)和count(读取元素个数)参数,步骤如下:

  1. 确定数组元素的字节大小:比如np.float32每个元素占4字节
  2. 计算文件偏移量:从文件开头跳过a * 元素字节数的位置
  3. 计算要读取的元素总数:b - a

示例代码:

import numpy as np

# 设置切片范围
a = 5000  # 起始索引
b = 8000  # 结束索引(不包含)

# 获取数据类型的字节大小
item_size = np.dtype(np.float32).itemsize
# 计算文件偏移量
offset = a * item_size
# 要读取的元素数量
read_count = b - a

# 读取指定切片
target_slice = np.fromfile('filename.dat', dtype=np.float32, offset=offset, count=read_count)

方法二:手动操作文件指针读取

如果需要更灵活的文件操作,可以用Python内置的文件操作函数配合np.frombuffer:

import numpy as np

a = 5000
b = 8000
item_size = np.dtype(np.float32).itemsize
read_bytes = (b - a) * item_size

with open('filename.dat', 'rb') as f:
    # 将文件指针移动到目标切片的起始位置
    f.seek(a * item_size)
    # 读取对应字节数的二进制数据
    raw_data = f.read(read_bytes)
    # 将二进制数据转换为numpy数组
    target_slice = np.frombuffer(raw_data, dtype=np.float32)

注意事项

  • 必须保证读取时的dtype和保存数组时的类型完全一致,否则会出现数据错乱
  • 用array.tofile()保存的是数组的连续内存块,所以上述方法完全适用;如果是其他非连续方式保存的数组,需要额外处理内存布局问题

内容的提问来源于stack exchange,提问作者Ramufasa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:14