# Binary vectors

DiagHam stores vectors in binary mode. A full set of tools is provided in to manipulate them.

## Tools

GenericOverlap
compute overlaps between binary vectors
NormalizeVector
normalize a binary vector
VectorBinary2Ascii
convert from a binary vector to a text file
VectorAscii2Binary
convert from a column formated text file to a binary file
CountingZero
count the number of zero components in a binary vector
BuildSuperPosition
create a linear superposition of binary vectors
ExtractLinearlyIndependentVectors
extract a set of linearly independent vectors from a given set of vectors
VectorPhaseMultiply
multiply a binary vector with a complex phase factor
DiffBinaryVectors
compares two binary vectors

## File Format

In Diagham, binary matrix file format is fully supported by any class deriving from Matrix. But the format itself is simple enough to be used by any other code. All data is recorded accroding to the little endian ordering for bytes (the default ordering if you use a x86 or related cpu architecture). Using the C/C++ types, the format depends on the type of data. For real vectors with less than 2^31 components, the binary vectors are stored as

• int (4-bytes) : vector dimension
• double (8-bytes) * dim : as many double as we have vector component

Below we give a simple example of a python code reading a real binary vector test.vec and computing its square norm

```   import numpy as np
import os

InputFile = open('test.vec','rb')

Dimension = np.fromfile(InputFile, '<i4', count=1)
print ('Vector Dimension = '+str(Dimension))

Vector = np.fromfile(InputFile, '<d', count=Dimension)
Norm = 0.0
for Component in Vector:
Norm += Component * Component

print ('Sqr Norm = '+str(Norm))
InputFile.close()
```