<br><br><div class="gmail_quote">On Jan 7, 2008 8:47 AM, Ryan May &lt;<a href="mailto:rmay@ou.edu">rmay@ou.edu</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">Stuart Brorson wrote:<br>&gt;&gt;&gt; I realize NumPy != Matlab, but I&#39;d wager that most users would think<br>&gt;&gt;&gt; that this is the natural behavior......<br>&gt;&gt; Well, that behavior won&#39;t happen. We won&#39;t mutate the dtype of the array because
<br>&gt;&gt; of assignment. Matlab has copy(-on-write) semantics for things like slices while<br>&gt;&gt; we have view semantics. We can&#39;t safely do the reallocation of memory [1].<br>&gt;<br>&gt; That&#39;s fair enough. &nbsp;But then I think NumPy should consistently
<br>&gt; typecheck all assignmetns and throw an exception if the user attempts<br>&gt; an assignment which looses information.<br>&gt;<br><br></div>Yeah, there&#39;s no doubt in my mind that this is a bug, if for no other
<br>reason than this inconsistency:<br></blockquote><div><br>One place where Numpy differs from MatLab is the way memory is handled. MatLab is always generating new arrays, so for efficiency it is worth preallocating arrays and then filling in the parts. This is not the case in Numpy where lists can be used for things that grow and subarrays are views. Consequently, preallocating arrays in Numpy should be rare and used when either the values have to be generated explicitly, which is what you see when using the indexes in your first example. As to assignment between arrays, it is a mixed question. The problem again is memory usage. For large arrays, it makes since to do automatic conversions, as is also the case in functions taking output arrays, because the typecast can be pushed down into C where it is time and space efficient, whereas explicitly converting the array uses up temporary space. However, I can imagine an explicit typecast function, something like
<br><br>a[...] = typecast(b)<br><br>that would replace the current behavior. I think the typecast function could be implemented by returning a view of b with a castable flag set to true, that should supply enough information for the assignment operator to do its job. This might be a good addition for Numpy 
1.1.<br><br>Chuck<br></div></div><br>