[Numpy-discussion] Raveling, reshape order keyword unnecessarily confuses index and memory ordering
Thu Apr 4 18:13:31 CDT 2013
On Thu, Apr 4, 2013 at 5:54 PM, Chris Barker - NOAA Federal
> On Thu, Apr 4, 2013 at 11:26 AM, <email@example.com> wrote:
>>> Before you answer that -- does anyone see a use case for the 'A' and
>>> 'K' flags that can't be reasonably easily accomplished with .view() or
>>> asarray() or ???
>> What order does a[a>2] use to create the returned 1-D array?
>> However, I never needed to know and never cared
>> a[a>2] = 5
>> a[a>2] = b[a>2]
>> Now, after this thread, I know about "K",
> does that use case use ravel() or reshape() under the hood?
only ravel has "K" as far as I saw in the current documentation.
example for ravel("K") would be if axis=None in functions and we
only have elementwise or reduce operations.
All the code I've seen uses just ravel() in this case, instead,
ravel("K") would have a better chance to avoid array copying,
if axis is None:
x = x.ravel("K")
return ((x - x.mean(0))**2).sum(0)
but it's dangerous because, if there is a second array, it might not ravel("K")
the same way
x.ravel("K") - y.ravel("K") sounds fun
similar if x[mask] wouldn't select a fixed "order", then
a[a>2] = b[a>2] would also be fun
fun := find the bug that I have hidden in this code
The only reason to use reshape with "A", I can think
of, is, if the array (matrix) is symmetric, or if it's a square
picture and we never care whether it's upright or sideways.
reshape(.., order="A") and ravel("A") should roundtrip, I guess.
>> and there might be cases
>> where it would be appropriate to minimize copying memory,
> hmm -- yes, that makes sense, and perhaps compelling enough to keep
> them around (at least with perhaps better docs).
> Christopher Barker, Ph.D.
> Emergency Response Division
> NOAA/NOS/OR&R (206) 526-6959 voice
> 7600 Sand Point Way NE (206) 526-6329 fax
> Seattle, WA 98115 (206) 526-6317 main reception
> NumPy-Discussion mailing list
More information about the NumPy-Discussion