Source code for SALib.sample.latin

from __future__ import division

import numpy as np

from . import common_args
from ..util import scale_samples, read_param_file


[docs]def sample(problem, N, seed=None): """Generate model inputs using Latin hypercube sampling (LHS). Returns a NumPy matrix containing the model inputs generated by Latin hypercube sampling. The resulting matrix contains N rows and D columns, where D is the number of parameters. Parameters ---------- problem : dict The problem definition N : int The number of samples to generate """ if seed: np.random.seed(seed) D = problem['num_vars'] result = np.zeros([N, D]) temp = np.zeros([N]) d = 1.0 / N for i in range(D): for j in range(N): temp[j] = np.random.uniform( low=j * d, high=(j + 1) * d, size=1)[0] np.random.shuffle(temp) for j in range(N): result[j, i] = temp[j] scale_samples(result, problem['bounds']) return result
[docs]def cli_parse(parser): """Add method specific options to CLI parser. Parameters ---------- parser : argparse object Returns ---------- Updated argparse object """ parser.add_argument('-n', '--samples', type=int, required=True, help='Number of Samples') return parser
[docs]def cli_action(args): """Run sampling method Parameters ---------- args : argparse namespace """ problem = read_param_file(args.paramfile) param_values = sample(problem, args.samples, seed=args.seed) np.savetxt(args.output, param_values, delimiter=args.delimiter, fmt='%.' + str(args.precision) + 'e')
if __name__ == "__main__": common_args.run_cli(cli_parse, cli_action)