1. A codevector trainer comprising: an input data vector memory for storing a plurality of input data vectors therein; a codevector memory for storing j codevectors therein; i×j vector distance calculating units forming an array of i rows and j columns, the i×j vector distance calculating units being in data communication with the input memory and the codevector memory, the i×j vector distance calculating units for performing the steps of: a) receiving one component of each of i input data vectors from the input data vector memory and one component of each of the j codevectors from the codevector memory, the components corresponding to a same dimension within the vectors; b) determining i×j vector component distances corresponding to i×j combinations of the i input data vectors and the j codevectors; c) summing the successive i×j vector component distances such that each of the successive i×j vector component distances is added in a respective vector distance calculating unit of the i×j vector distance calculating units in order to determine i×j scalar vector distances; and, d) repeating the steps a), b) and c) for successive components; e) accumulating the i input data vectors in j partitions, the j partitions corresponding to the j codevectors, the i input data vectors being accumulated in dependence upon their assignment to one of the j partitions; and, a control unit in data communication with the input data vector memory, the codevector memory, and the i×j vector distance calculating units for performing the steps of: controlling provision of the components of the input data vectors and the codevectors to the respective vector distance calculating units; determining a best match codevector for each of the i input data vectors in dependence upon the scalar vector distances; assigning each of the i input data vectors to one of the j partitions in dependence upon the best match codevector; and, updating the codevectors in dependence upon the accumulated input data vectors associated with j partitions.