By the way, I'd agree with anyone who
said that the syntax of -matewmf- was
fairly horrible. If I were writing
it today, I would have implemented
a different syntax. But there's no
point in a radical rewrite, given Mata.
Nick
[email protected]
Nick Cox
> Mata Answers This Admirably!
>
> . mata :
> ------------------------------------------------- mata (type
> end to exit) ------------------
> : m = (1,2,3\4,5,6\7,8,9)
>
> : sqrt(m)
> 1 2 3
> +-------------------------------------------+
> 1 | 1 1.414213562 1.732050808 |
> 2 | 2 2.236067977 2.449489743 |
> 3 | 2.645751311 2.828427125 3 |
> +-------------------------------------------+
>
> Otherwise, in Stata <9, this is essentially the same question
> as one asked a few days ago. An ancient program
> to do this, and other _e_lement_w_ise _m_onadic
> _f_unction problems, is -matewmf-:
>
> STB-56 dm79 . . . . . . . . . . . . . . . . . . Yet more
> new matrix commands
> (help matcorr, matewmf, matvsort, svmat2 if
> installed) . . N. J. Cox
> 7/00 pp.4--8; STB Reprints Vol 10, pp.17--23
> commands to produce a correlation matrix, elementwise monadic
> function of another matrix, selected subsets of matrix rows
> and columns, vec or vech of a matrix, elements sorted within
> a vector, matrix from a vector, and commands to save matrices
>
> That name is so unlikely that you would never guess it, but
>
> . search matrix
>
> would have pointed to it.
>
> . matrix A = (1,2,3\4,5,6\7,8,9)
>
> . matewmf A B , function(sqrt)
>
> . mat li B
>
> B[3,3]
> c1 c2 c3
> r1 1 1.4142136 1.7320508
> r2 2 2.236068 2.4494897
> r3 2.6457513 2.8284271 3
>
> -matewmf- as published in STB-56 is about
> 30 lines long, but can now be written much
> more concisely:
>
> *! 1.1.0 NJC 17 November 2005
> *! 1.0.0 NJC 25 January 2000
> program matewmf
> version 8.0
> gettoken A 0 : 0
> gettoken B 0 : 0, parse(" ,")
> syntax , Function(str)
> tempname C
> mat `C' = `A'
> forval i = 1/`=rowsof(matrix(`A'))' {
> forval j = 1/`=colsof(matrix(`A'))' {
> mat `C'[`i',`j'] = `function'(`A'[`i',`j'])
> }
> }
> mat `B' = `C' /* allows overwriting of either `A' or `B' */
> end
>
> from which you can see, as would be expected, that
> the problem boils down to a double loop.
>
> Nick
> [email protected]
>
> I.A.C. van de Snepscheut
>
> > Is there a simple way to take the sqrt of all the elements in
> > a matrix?
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/