[Numpy-discussion] Raveling, reshape order keyword unnecessarily confuses index and memory ordering

Nathaniel Smith njs@pobox....
Tue Apr 2 16:52:57 CDT 2013

On Tue, Apr 2, 2013 at 10:21 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
>> This is like observing that if I say "go North" then it's ambiguous
>> about whether I want you to drive or walk, and concluding that we need
>> new words for the directions depending on what sort of vehicle you
>> use. So "go North" means drive North, "go htuoS" means walk North,
>> etc. Totally silly. Makes much more sense to have one set of words for
>> directions, and then make clear from context what the directions are
>> used for -- "drive North", "walk North". Or "iterate C-wards", "store
>> F-wards".
>> "C" and "Z" mean exactly the same thing -- they describe a way of
>> unraveling a cube into a straight line. The difference is what we do
>> with the resulting straight line. That's why I'm suggesting that the
>> distinction should be made in the name of the argument.
> Could you unpack that for the 'ravel' docstring?  Because these
> options all refer to the way of unraveling and not the memory layout
> that results.

Z/C/column-major/whatever-you-want-to-call-it is a general strategy
for converting between a 1-dim representation and a n-dim
representation. In the case of memory storage, the 1-dim
representation is the flat space of pointer arithmetic. In the case of
ravel, the 1-dim representation is the flat space of a 1-dim indexed
array. But the 1-dim-to-n-dim part is the same in both cases.

I think that's why you're seeing people baffled by your proposal -- to
them the "C" refers to this general strategy, and what's different is
the context where it gets applied. So giving the same strategy two
different names is silly; if anything it's the contexts that should
have different names.


More information about the NumPy-Discussion mailing list