# st: RE: sqrt of all elements of a matrix

 From "Nick Cox" To Subject st: RE: sqrt of all elements of a matrix Date Thu, 17 Nov 2005 11:45:31 -0000

```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
n.j.cox@durham.ac.uk

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/
```