<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7651.59">
<TITLE>memory error caused by astype()</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Hi list,</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">When I do large array manipulations, I get out-of-memory errors.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">F</FONT><FONT SIZE=2 FACE="Courier New">or</FONT> <FONT SIZE=2 FACE="Courier New">instance i</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">f the array size is 5000 by 6000, the following code</FONT><FONT SIZE=2 FACE="Courier New">s use nearly 1G</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> of RAM</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> </SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Then my PC displays a Python error box.  The try/except won</FONT><FONT SIZE=2 FACE="Courier New">’</FONT><FONT SIZE=2 FACE="Courier New">t</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">even</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">catch it if the</FONT> <FONT SIZE=2 FACE="Courier New">error</FONT><FONT SIZE=2 FACE="Courier New"> happens in “astype” instead of “</FONT><FONT SIZE=2 FACE="Courier New">array1</FONT><FONT SIZE=2 FACE="Courier New">*</FONT> <FONT SIZE=2 FACE="Courier New">array</FONT><FONT SIZE=2 FACE="Courier New">2”</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">    try:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        if ( array1.typecode() in cplx_types ):</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">            array1 = abs(array1.astype(Num</FONT><FONT SIZE=2 FACE="Courier New">eric.Complex32))</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        else:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">            array1 = array1.astype(Numeric.Float32)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        if ( array</FONT><FONT SIZE=2 FACE="Courier New">2</FONT><FONT SIZE=2 FACE="Courier New">.typecode() in cplx_types ):</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">            array</FONT><FONT SIZE=2 FACE="Courier New">2</FONT><FONT SIZE=2 FACE="Courier New"> = abs(array</FONT><FONT SIZE=2 FACE="Courier New">2</FONT><FONT SIZE=2 FACE="Courier New">.astype(Numeric.Complex32))</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        else:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">            array</FONT><FONT SIZE=2 FACE="Courier New">2</FONT><FONT SIZE=2 FACE="Courier New"> = array</FONT><FONT SIZE=2 FACE="Courier New">2</FONT><FONT SIZE=2 FACE="Courier New">.astype(Numeric.Float32)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        array1 = Numeric.sqrt(array1) * Numeric.sqrt(array2)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        return array1</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">    except:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        gvutils.error("Memory error occurred\nPlease select a smaller</FONT> <FONT SIZE=2 FACE="Courier New">array</FONT><FONT SIZE=2 FACE="Courier New">")</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        return None</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">My questions are:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">1)     </FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">Is</FONT><FONT SIZE=2 FACE="Courier New"> there a more memory efficient way</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">instead</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">of</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">us</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">ing</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">astype</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">?</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">2)     </FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">If not, then how do I catch</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">error</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT> <FONT SIZE=2 FACE="Courier New">during astype</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">?</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">3)     </FONT> <FONT SIZE=2 FACE="Courier New">Is there a way in Python that detects the available RAM and limits the array size before he/she can go ahead with the array multiplications</FONT><FONT SIZE=2 FACE="Courier New">?  </FONT></SPAN></P>
<UL DIR=LTR><UL DIR=LTR><UL DIR=LTR>
<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">i.e. detects the available RAM, say</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">1G</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Assume</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">the</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">worst case -</FONT> <FONT SIZE=2 FACE="Courier New">Complex32</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Figure out</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">the</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">array size limit</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">and warn user</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>
</UL></UL></UL>
<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Thanks,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">Shaw Gong</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

</BODY>
</HTML>