From: Huaiyu Z. <hua...@ya...> - 2002-09-18 07:02:29
|
On Tue, 17 Sep 2002, Travis Oliphant wrote: > > len(d) == Exception == d.shape[0] > > > > # Currently the last is wrong? > > Agreed, but this is because d is an integer and out of Numerics control. > This is a case for returning 0d arrays rather than Python scalars. That is one problem. It can be removed by using shape(d). More fundamentally, though, len(d) == shape(d)[0] == ()[0] => IndexError. I think Konrad made this point a few days back. > > size(d) == 1 == product(d.shape) > > > > # Currently the last is wrong > > I disagree that this is wrong. This works as described for me. Right. Change d.shape to shape(d) here (and in several other places). > Why is this? I thought you argued the other way for len(scalar). Of > course, one solution is that we could overwrite the len() function and > allow it to work for scalars. Raising exception is the correct behavior, not a problem to be solved. > > > > Conclusion 5: rank-0 int arrays should be allowed to act as indices. > > See property 5. > > Can't do this for lists and other builtin sequences. If numarray defines a consistent set of behaviors for integer types that is intuitively understandable, it might not be difficult to persuade core Python to check against an abstract integer type. > > - Is there substantial difference in overhead between rank-0 arrays and > > scalars? > > Yes. That would be one major problem. However, after giving this some more thoughts, I'm starting to doubt the analogy I made. The problem is that in the end there is still a need to index an array and obtain a good old immutable scalar. So - What notation should be used for this purpose? We can use c[0] to get immutable scalars and c[0,] for rank-0 arrays / mutable scalars. But what about other ranks? Python does not allow distinctions based on a[1,1,1] versus a[(1,1,1)] or d[] versus d[()]. - This weakens the argument that rank-0 arrays are scalars, since that argument is essentially based on sum(c) and c[0] being of the same type. Huaiyu |