-
philippe.montando authoredphilippe.montando authored
load_vec.py 1.17 KiB
import numpy as np
from typing import Tuple
METADATA_SIZE = 6
def _parse_metadata(metadata: bytes) -> Tuple[type, int]:
"""
Parse the metadata for a vec file.
Parameters:
metadata (bytes): The metadata bytes
Returns:
(type, int): The type and the number of component of the vector
"""
little_endian = bool(metadata[0])
endianness = 'little' if little_endian else 'big'
size_of_components = int(metadata[1])
# For now we only consider two types
datatype = np.float64 if size_of_components == 8 else np.float
# Recover our 32 bit integer specifying the endianness
nb_components = int.from_bytes(metadata[2:], endianness)
return datatype, nb_components
def load_vector(filename: str) -> np.ndarray:
"""
Load a vector from a file.
Parameters:
filename (str): The name of the file containing the vector
Returns:
np.ndarray: The vector
"""
file = open(filename, 'rb')
# Read our metadata struct
metadata = file.read(METADATA_SIZE)
datatype, nb_components = _parse_metadata(metadata)
array = np.fromfile(file, dtype=datatype, count=nb_components)
file.close()
return array