|
From: Sven S. <sve...@gm...> - 2006-02-21 13:42:10
|
Hi, sometimes I'm still struggling with peculiarities of numpy-arrays vs. numpy-matrices; my latest story goes like this: I first slice out a column of a 2d-numpy-array (a = somearray[:,1]). I can just manage to understand the resulting shape ( == (112,) ). Then I slice a column from a numpy-matrix b = somematrix[:,1] and get the expected (112,1) shape. Then I do what I thought was the easiest thing in the world, I subtract the two vectors: c = a - b I was very surprised by the bug that showed up due to the fact that c.shape == (112,112) !! First conclusion: broadcasting is nice and everything, but here I somehow think that it shouldn't be like this. I like numpy, but this is frustrating. Next, I try to workaround by b.squeeze(). That seems to work, but why is b.squeeze().shape == (1, 112) instead of (112,)? Then I thought maybe b.flattened() does the job, but then I get an error (matrix has no attr flattened). Again, I'm baffled. Could someone please explain? I already own the numpy-book, otherwise I wouldn't even have thought of using those methods, but here it hasn't enlightened me. Second (preliminary) conclusion: I will paranoically use even more asmatrix()-conversions in my code to avoid dealing with those array-beasts ;-) and get column vectors I can trust... Is there a better general advice than to say: "numpy-matrices and numpy-arrays are best kept in separated worlds" ? Thanks for any insights, Sven |