numpy.fromfile 是一个用于从二进制文件中读取数据并将其转换为 NumPy 数组的函数。它特别适用于需要从文件中读取大量数值数据的场景。本文主要介绍一下NumPy中fromfile方法的使用。

numpy.fromfile

numpy.fromfile(file, dtype=float, count=-1, sep='', offset=0)

从文本或二进制文件中的数据构造一个数组。

读取已知数据类型的二进制数据以及解析简单格式化的文本文件的一种高效方法。使用tofile方法写入的数据可以使用此函数读取。

参数

file :filestrPath

打开文件对象或文件名。

在1.17.0版中进行了更改:pathlib.Path现在接受对象。

dtype :data-type, 可选

返回数组的数据类型。对于二进制文件,

它用于确定文件中各项的大小和字节顺序。

支持大多数内置数字类型,并且可能支持扩展名类型。

1.18.0版中的新功能:复杂dtypes

countint

要读取的项目数。-1表示所有项目(即完整文件)。

sep :str

如果文件是文本文件,则项目之间的分隔符。

空(“”)分隔符表示文件应被视为二进制文件。

分隔符中的空格(“”)匹配零个或多个空格字符。

仅由空格组成的分隔符必须至少匹配一个空格。

offsetint

与文件当前位置的偏移量(以字节为单位)。

默认值为0。仅允许用于二进制文件。

1.17.0版中的新功能。

Notes

不要依赖于tofile和fromfile数据存储的组合,因为生成的二进制文件不是平台无关的。特别是,不保存字节顺序或数据类型信息。可以.npy使用saveload代替平台独立格式存储数据。

例子

1)从二进制文件中读取数据

假设我们有一个二进制文件 data.bin,包含一些浮点数,可以使用 numpy.fromfile 读取这些数据。

import numpy as np

# 创建一些数据并保存到二进制文件
data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32)
data.tofile('data.bin')
#从这个文件中读取数据:

# 从二进制文件中读取数据
data = np.fromfile('data.bin', dtype=np.float32)
print(data)

2)从文本文件中读取数据

import numpy as np

# 创建并写入 data.txt 文件
with open('data.txt', 'w') as f:
    f.write('1.1 2.2 3.3 4.4 5.5')
    
# 从文本文件中读取数据
data = np.fromfile('data.txt', dtype=np.float32, sep=' ')
print(data)

3)读取部分数据

可以使用 count 参数来限制读取的项数:

import numpy as np


# 创建一些数据并保存到二进制文件
data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32)
data.tofile('data.bin')

# 从二进制文件中读取前3个数据
data = np.fromfile('data.bin', dtype=np.float32, count=3)
print(data)

4)使用偏移量读取数据

可以使用 offset 参数从文件的特定位置开始读取数据:

import numpy as np


# 创建一些数据并保存到二进制文件
data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32)
data.tofile('data.bin')

# 从二进制文件中读取数据,跳过前两个数据
data = np.fromfile('data.bin', dtype=np.float32, offset=2*4)  # 4 bytes per float32
print(data)

5)使用示例

import numpy as np
import tempfile

# 构造一个复杂的 ndarray
dt = np.dtype([('time', [('min', np.int64), ('sec', np.int64)]), ('temp', float)])
x = np.zeros((1,), dtype=dt)
x['time']['min'] = 10
x['time']['sec'] = 0
x['temp'] = 98.25

print("Original ndarray:")
print(x)

# 将原始数据保存到磁盘
fname = tempfile.mkstemp()[1]
x.tofile(fname)

# 从磁盘读取原始数据
x_from_file = np.fromfile(fname, dtype=dt)
print("\nndarray read from file using np.fromfile:")
print(x_from_file)

# 推荐的存储和加载数据的方式
np.save(fname, x)
x_loaded = np.load(fname + '.npy')
print("\nndarray read from file using np.save and np.load:")
print(x_loaded)

推荐文档

相关文档

大家感兴趣的内容

随机列表