Force a Dataset to be a Latin Hypercube

TABLE_LATINIZE is a C++ program which allows the user to specify a file of data to be read in and adjusted to form a Latin hypercube.

The data in the file represents N points in M-dimensional space.

The algorithm is actually very simple. In each spatial dimension, the point coordinates are sorted, and then replaced by the appropriate values for a Latin hypercube. In particular, if there are four points, then in every coordinate, the four points will be assigned values of 1/8, 3/8, 5/8 and 7/8 (in some order). The hope is that if the initial dataset has some nice dispersion property, then the resulting adjusted dataset will inherit some of this dispersion as well; in particular, more dispersion than typically seen in an arbitrary Latin hypercube.


table_latinize file(s)
reads the user's data file(s) and writes "latinized" versions which will have an extension of "latin.txt".


The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.


TABLE_LATINIZE is available in a C++ version and a FORTRAN90 version and a MATLAB version.

Related Data and Programs:

BOX_BEHNKEN, a C++ library which computes a Box-Behnken design, that is, a set of arguments to sample the behavior of a function of multiple parameters;

LATINIZE, a C++ library which carries out the calculations needed by TABLE_LATINIZE.

TABLE, a file format which is used for the input and output of TABLE_LATINIZE.

TABLE_DELAUNAY, a C++ program which reads a file of 2d point coordinates and computes the Delaunay triangulation.

TABLE_IO, a C++ library which can read or write a TABLE file.

TABLE_QUALITY, a C++ program which can read a TABLE file and print out measures of the quality of dispersion of the points.


  1. Yuki Saka, Max Gunzburger, John Burkardt,
    Latinized, Improved LHS, and CVT Point Sets in Hypercubes,
    International Journal of Numerical Analysis and Modeling,
    Volume 4, Number 3-4, 2007, pages 729-743,

Source Code:

Examples and Tests:

CVT_02_00010 is a set of 10 CVT points in 2D:

CVT_03_00007 is a set of 7 CVT points in 3D:

CVT_03_00056 is a set of 56 CVT points in 3D:

CVT_07_00100 is a set of 100 CVT points in 7D:

List of Routines:

You can go up one level to the C++ source codes.

Last revised on 23 September 2005.