<!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">H</FONT><FONT SIZE=2 FACE="Courier New">i</FONT> <FONT SIZE=2 FACE="Courier New">list,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">W</FONT><FONT SIZE=2 FACE="Courier New">hen</FONT> <FONT SIZE=2 FACE="Courier New">I do</FONT> <FONT SIZE=2 FACE="Courier New">large array manipulations, I get out-of-memory errors</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">If the</FONT><FONT SIZE=2 FACE="Courier New"> array size is</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">5</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">000 by 6000</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">, the following codes use</FONT> <FONT SIZE=2 FACE="Courier New">nea</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">rly 1G.</FONT> <FONT SIZE=2 FACE="Courier New">Then my PC displays a Python error box.  The try/except won</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"><FONT SIZE=2 FACE="Courier New">t</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">catch</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT> <FONT SIZE=2 FACE="Courier New">it if the</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">memory error</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> happens in</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"><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><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> instead of</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"><FONT SIZE=2 FACE="Courier New">array1</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">*</FONT><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><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">”</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"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">    try:</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">        if ( array1.typecode() in cplx_ty</FONT><FONT SIZE=2 FACE="Courier New">pes ):</FONT></SPAN></P>

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

<P DIR=LTR><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">        if ( array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><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">.typecode() in cplx_ty</FONT><FONT SIZE=2 FACE="Courier New">pes ):</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">            array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><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"> = abs(array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><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">.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></SPAN><SPAN LANG="en-ca"></SPAN><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"> = array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><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">.astype(Numeric.Float32</FONT><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">        array1 = Numeric.sqrt(array1) * Numeric.sqrt(array2)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">        return</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">array1</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"></SPAN><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></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">array</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">        return None</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">My questions are:</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">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 of doing this?</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">How do I deal with exception if astype is the only way to go</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">3)     </FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">Is there a</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">way</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> in</FONT> <FONT SIZE=2 FACE="Courier New">P</FONT><FONT SIZE=2 FACE="Courier New">ython</FONT><FONT SIZE=2 FACE="Courier New"> that detects the available RAM and limit</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">s</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> the array size before he/she can go ahead with the</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">array</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">multiplications</FONT><FONT SIZE=2 FACE="Courier New">?</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><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.</FONT><FONT SIZE=2 FACE="Courier New">e.</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"> <FONT SIZE=2 FACE="Courier New">detects the available RAM</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">, say</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">800K</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">A</FONT><FONT SIZE=2 FACE="Courier New">ssume</FONT> <FONT SIZE=2 FACE="Courier New">worst case</FONT><FONT SIZE=2 FACE="Courier New"> -</FONT><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">Complex32</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">F</FONT><FONT SIZE=2 FACE="Courier New">igure</FONT> <FONT SIZE=2 FACE="Courier New">out</FONT> <FONT SIZE=2 FACE="Courier New">how many temp</FONT><FONT SIZE=2 FACE="Courier New">_</FONT><FONT SIZE=2 FACE="Courier New">arrays</FONT> <FONT SIZE=2 FACE="Courier New">used by numpy</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">C</FONT><FONT SIZE=2 FACE="Courier New">alculate</FONT> <FONT SIZE=2 FACE="Courier New">array size</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">limit</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">=</FONT> <FONT SIZE=2 FACE="Courier New">??</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>
</UL></UL></UL>
<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">4)     </FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">If there is no 3) Is there something in Python that monitors memory a</FONT><FONT SIZE=2 FACE="Courier New">nd warns the user.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">I have</FONT> <FONT SIZE=2 FACE="Courier New">these</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"><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><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> at a number</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">functions.  Do I have to put try/except at each location?</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">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>