[Numpy-discussion] mixing arrays and matrices: squeeze yes, flattened no?

Christopher Barker Chris.Barker at noaa.gov
Tue Feb 21 16:56:01 EST 2006


Sven Schreiber wrote:
>>>>> a = N.ones((5,10))
>>>>> a[:,1].shape # an index: it reduces the rank
>> (5,)
>>>>> a[:,1:2].shape # a slice: it keeps the rank
>> (5, 1)
>>
> That's very interesting, thanks. But I find it a little
> unintuitive/surprising, so I'm not sure if I will use it. I fear that I
> wouldn't understand my own code after a while of not working on it.

Well, what's surprising to different people is different. However....

> I guess I'd rather follow the advice and just remember to treat 1d as a row.

Except that it's not, universally. For instance, it won't transpose:

 >>> a = N.ones((5,))
 >>> a.transpose()
array([1, 1, 1, 1, 1])
 >>> a.shape = (1,-1)
 >>> a
array([[1, 1, 1, 1, 1]])
 >>> a.transpose()
array([[1],
        [1],
        [1],
        [1],
        [1]])

so while a rank-1 array is often treated like a row vector, it really 
isn't the same. The concept of a row vs a column vector is a rank-2 
array concept -- so keep your arrays rank-2.

It's very helpful to remember that indexing reduces rank, and slicing 
keeps the rank the same. It will serve you well to use that in the 
future anyway.

-Chris

-- 
Christopher Barker, Ph.D.
Oceanographer
                                     		
NOAA/OR&R/HAZMAT         (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov




More information about the NumPy-Discussion mailing list