On Fri, 10 Jul 2009, Sven Schreiber wrote:
Am 10.07.2009 12:49, Riccardo (Jack) Lucchetti schrieb:
> On Fri, 10 Jul 2009, Sven Schreiber wrote:
>
>
>>> Oh, sorry, I should have said: the rev() function reverses the order of
>>> the _rows_ of the matrix (from the example above, it could have been the
>>> columns).
>>
>> Would it be worthwhile to generalize this to columns as well? Maybe
>> using an optional second argument or so. I'm not sure about it, and I'm
>> aware of rev(A')', just asking as long as it's still in "design
stage".
>
> If you ask me, I'd rather have one function with the user in charge of
> transposing things twice, rather than two and save the user the
> inconvenience. IMHO, all other things being equal, the fewer functions
> the better. But of course I'm open to change my mind on this.
>
I agree that two separate functions would not be good. What I meant was
something like:
rev(A,1) -- reverses row-wise
rev(A,2) -- reverses col-wise (or maybe rev(A,'c'))
rev(A) -- defaults to /alias for rev(A,1)
But I don't have a strong opinion, given gretl's short transposition syntax.
(I'm sending this to gretl-dev too, since it's a bit technical)
This may make sense, with a slight modification: instead of 1/2, I'd
rather use 0/1, so it becomes easy to decide on a logical condition (eg.
rev(A, foo>bar)). Besides, reversing columns would probably be more
CPU-efficient, since we could use memcpy() for that, as in
----- C code -----------------------------------------------------
gretl_matrix *gretl_matrix_reverse_cols (const gretl_matrix *m)
{
int i, r, c;
gretl_matrix *ret;
if (m == NULL) {
return NULL;
}
if (gretl_is_null_matrix(m)) {
return gretl_null_matrix_new();
}
r = m->rows;
c = m->cols;
ret = gretl_matrix_alloc(r, c);
if (ret == NULL) {
return NULL;
}
double *x = m->val;
double *y = ret->val;
int size = r * sizeof *x;
y += r*(c-1);
for (i=0; i<c; i++) {
memcpy(y, x, size);
x += r;
y -= r;
}
return ret;
}
----- end C code -------------------------------------------------
Allin, what do you think?
Riccardo (Jack) Lucchetti
Dipartimento di Economia
Università Politecnica delle Marche
r.lucchetti(a)univpm.it
http://www.econ.univpm.it/lucchetti