On Thu, 24 Apr 2008, Christopher Barker apparently wrote:
> for r in MyMatrix.A:
Of course: this possibility is mentioned explicitly in
several of my posts. There are a few different answers to
why asking users to do this annoying:
1. It is a deviation from the behavior of 2d arrays
that does not seem to "buy" anything, so it
pointlessly breaks a natural expectation. (But
maybe some will show that it does buy a benefit.)
So it breaks the rule: stick with the behavior of 2d
arrays except for *, **, and nonscalar indexing,
which is a pretty understandable rule. To this
extent I agree with Tim that matrices and arrays
should be as alike as it is feasible to make them,
while still getting the convenience of *, **, and
submatrices via nonscalar indexing.
2. Whenever you do not know ahead of time whether
you will pass an array or a matrix, you must bear
the (small but annoying) cost of working around your
ignorance.
3. In my own experience, whenever I want to iterate
over a matrix, I want the 1d arrays. Others may
have different experiences, but they have not shared
them. Unless we find users who actually want the
vectors you want to provide them with, you seem to
be promoting this approach based on fairly abstract
design considerations. (Which is not necessarily
bad of course.)
4. If users do want to iterate over rows and
columns, it is more natural (i.e., symmetrical) to
provide these as attributes of the matrix.
I do not mean for any of this to be determinative. Indeed,
against this are two possible arguments.
1. For matrices and sparse matrices to nicely behave
alike, your proposal will be necessary. (This case
has not been made yet, however.)
2. I think Stefan might argue something like, to
leave the "linear algebra world", you should have to
be quite explicit, as x.A is. I find it explict
enough if we use a matrix as an iterator---to me
that means indeed I am leaving the matrices in favor
of arrays.
Cheers,
Alan Isaac