<br><br><div><span class="gmail_quote">On 8/26/06, <b class="gmail_sendername">Torgil Svensson</b> &lt;<a href="mailto:torgil.svensson@gmail.com">torgil.svensson@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi<br><br>ndarray.std(axis=1) seems to have memory issues on large 2D-arrays. I<br>first thought I had a performance issue but discovered that std() used<br>lots of memory and therefore caused lots of swapping.<br><br>I want to get an array where element i is the stadard deviation of row
<br>i in the 2D array. Using valgrind on the std() function...<br><br>$ valgrind --tool=massif python -c &quot;from numpy import *;<br>a=reshape(arange(100000*100),(100000,100)).std(axis=1)&quot;<br><br>... showed me a peak of 200Mb memory while iterating line by line...
<br><br>$ valgrind --tool=massif python -c &quot;from numpy import *;<br>a=array([x.std() for x in reshape(arange(100000*100),(100000,100))])&quot;<br><br>... got a peak of 40Mb memory.<br><br>This seems unnecessary since we know before calculations what the
<br>output shape will be and should therefore be able to preallocate<br>memory.<br><br><br>My original problem was to get an moving average and a moving standard<br>deviation (120k rows and N=1000). For average I guess convolve should
<br>perform good, but is there anything smart for std()? For now I use ...</blockquote><div><br>Why not use convolve for the std also? You can't subtract the average first, but you could convolve the square of the vector and then use some variant of std = sqrt((convsqrs - n*avg**2)/(n-1)). There are possible precision problems but they may not matter for your application, especially if the moving window isn't really big.
<br></div><br>Chuck<br></div><br>