<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Sep 30, 2009, at 6:43 AM, Chris Colbert wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Lets say I have function that applies a homogeneous transformation<br>matrix to an Nx3 array of points using np.dot.<br><br>since the matrix is 4x4 I have to add a 4 column of ones to the array<br>so the function looks something like this:<br><br>def foo():<br> &nbsp;&nbsp;&nbsp;&nbsp;&lt;--snip--&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;pts = np.column_stack((Xquad, Yquad, Zquad, np.ones(Zquad.shape)))<br><br> &nbsp;&nbsp;&nbsp;&nbsp;transpts = np.dot(transmat, pts.T).T<br><br> &nbsp;&nbsp;&nbsp;&nbsp;return transpts[:,:3]<br><br>Since i'm returning just the view of the array, I imagine python<br>doesnt garbage collect transpts once the function returns and falls<br>out of scope (because numpy has increfed it in the view operation?).<br><br>So in essence, I still have that whole column of ones hanging around<br>wasting memory, is that about right?<br></div></blockquote><div><br></div>Yes. &nbsp;You will have the entire underlying array sitting there until the last view on it is deleted.&nbsp;</div><div><br></div><div>You can make return a copy explicitly using:</div><div><br></div><div>&nbsp;return transpts[:,:3].copy()</div><div><br></div><div>Then, the transpts array will be removed when the function returns.&nbsp;</div><div><br></div><div>-Travis</div><div><font class="Apple-style-span" size="3"><span class="Apple-style-span" style="font-size: 12px;"><span class="Apple-style-span" style="font-size: medium;"><br></span></span></font></div><div apple-content-edited="true"><br class="Apple-interchange-newline"> </div><br></body></html>