Ricardo,

Thank you very much for your answer. It works perfectly too.

El sáb, 5 ago 2023 a las 4:37, Riccardo (Jack) Lucchetti (<
p002...@staff.univpm.it>) escribió:

> On 04/08/2023 20:24, Josué Martínez-Castillo wrote:
> > Thank you both, Artur and sven. Both approaches were very helpful. I
> > finally used:
> >
> >> _ _
> >> # mymatrix: column1 = income, column2 = frequency
> >> matrix mymatrix = {35, 5; 120, 5; 150, 0; 320, 6; 400, 5}
> >> matrix result = {}
> >> loop i=1..5
> >>    result |= mshape(mymatrix[i,1], mymatrix[i,2], 1)
> >> endloop
> >> print mymatrix result
> >> _ _
> The best generalisation I could find to the 2-way (xtab) case is as
> follows:
>
> <hansl>
> set seed 1234567
>
> nr = 3
> nc = 2
>
> ### xtab case
>
> xt = mrandgen(i, 0, 6, nr, nc)
> tot = nr * nc
> result = zeros(sum(xt), 2)
> fin = 0
> loop j = 1 .. nc
>      loop i = 1 .. nr
>          x = xt[i,j]
>          if x > 0
>              ini = fin+1
>              fin += x
>              result[ini:fin,] = mshape({i,j}, 2, x)'
>          endif
>      endloop
> endloop
>
> print xt result
> </hansl>
>
> On the other hand, Sven's remark made me think that sometimes you might
> want to compute all possible indices of a arbitrarily-sized tensor. Once
> you have those, you can use them in a single loop without having to nest
> many.
>
> The function is:
>
> <hansl>
> function matrix indices(matrix dims)
>
>      n = nelem(dims)
>      if n == 0
>          ret = {}
>      elif n == 1
>          ret = seq(1, dims[1])'
>      else
>          matrix a = indices(dims[-1])
>          scalar d = dims[1]
>          scalar m = rows(a)
>          b = vec(mshape(seq(1,d), d, m)')
>          a = ones(d,1) ** a
>          ret = b ~ a
>      endif
>
>      return ret
> end function
> </hansl>
>
> So for example, you can create X = indices({2,3}), which would yield
>
>    1   1
>    1   2
>    1   3
>    2   1
>    2   2
>    2   3
>
> and loop over the rows of X instead of a nested loop construct such as
>
> <hansl>
> loop i = 1 .. 2
>      loop j = 1 .. 3
>      # do things
>      endloop
> endloop
> </hansl>
>
> The nice thing is, the number of elements in the argument to the
> "indices" function is potentially unlimited. For example,
> indices({3,2,3}) returns
>
>    1   1   1
>    1   1   2
>    1   1   3
>    1   2   1
>    1   2   2
>    1   2   3
>    2   1   1
>    2   1   2
>    2   1   3
>    2   2   1
>    2   2   2
>    2   2   3
>    3   1   1
>    3   1   2
>    3   1   3
>    3   2   1
>    3   2   2
>    3   2   3
>
> Maybe we could add this to the extra addon?
>
>
>
>
>
>
> -------------------------------------------------------
>    Riccardo (Jack) Lucchetti
>    Dipartimento di Scienze Economiche e Sociali (DiSES)
>
>    Università Politecnica delle Marche
>    (formerly known as Università di Ancona)
>
>    r.lucche...@univpm.it
>    http://www2.econ.univpm.it/servizi/hpp/lucchetti
> -------------------------------------------------------
> _______________________________________________
> Gretl-users mailing list -- gretl-users@gretlml.univpm.it
> To unsubscribe send an email to gretl-users-le...@gretlml.univpm.it
> Website:
> https://gretlml.univpm.it/postorius/lists/gretl-users.gretlml.univpm.it/
>
_______________________________________________
Gretl-users mailing list -- gretl-users@gretlml.univpm.it
To unsubscribe send an email to gretl-users-le...@gretlml.univpm.it
Website: 
https://gretlml.univpm.it/postorius/lists/gretl-users.gretlml.univpm.it/

Reply via email to