X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fdesign-matrix.c;h=8f125c58b1e734d3b5d38ce1262e1e4477280edd;hb=124dea11f9542304e35bef92b7f3a46d5afca4d7;hp=b81859aa5a539099f6e7a437ab053f31ce5fa202;hpb=7fbfc32fc3c636959b0a25b3e76609f86519e84a;p=pspp-builds.git diff --git a/src/math/design-matrix.c b/src/math/design-matrix.c index b81859aa..8f125c58 100644 --- a/src/math/design-matrix.c +++ b/src/math/design-matrix.c @@ -281,3 +281,27 @@ design_matrix_set_element (const struct design_matrix *d, size_t row, size_t col { gsl_matrix_set (d->m, row, col, x); } + +/* + Return the subscript of the column of the design matrix + corresponding to VAL. If VAR is categorical with d categories, its + first category should correspond to the origin in d-dimensional + Euclidean space, so there is no subscript for this value. + */ +size_t +dm_get_exact_subscript (const struct design_matrix *dm, const struct variable *var, + const union value *val) +{ + size_t result; + + result = design_matrix_var_to_column (dm, var); + if (var_is_alpha (var)) + { + if (cat_is_origin (var, val)) + { + return -1u; + } + result += cat_value_find (var, val) - 1; + } + return result; +}