On 3/24/07, Travis Oliphant <[EMAIL PROTECTED]> wrote:
Alan G Isaac wrote: > On Sat, 24 Mar 2007, Travis Oliphant apparently wrote: > >> My opinion is that a 1-d array in matrix-multiplication >> should always be interpreted as a row vector. Is this not >> what is currently done? If not, then it is a bug in my >> mind. >> > > >>>> N.__version__ >>>> > '1.0' > >>>> I >>>> > matrix([[ 1., 0.], > [ 0., 1.]]) > >>>> I*N.ones(2) >>>> > matrix([[ 1., 1.]]) > > If N.ones(2) were treated as a row vector, > matrix multiplication is not possible. > So the question is what should happen. > I would like an exception raised. > The current behavior is lmost certainly not desirable, > although it has the virute of matching ``dot``. > > I think that's why it is the current behavior --- by default rather than by design. But, dot has different use cases. I'd be fine with an error raised on matrix multiplication (as long as dot is not changed). In other words, I'd like to see 1-d arrays always interpreted the same way (as row vectors) when used in matrix multiplication.
The relevant bit of code is def __mul__(self, other): if isinstance(other, N.ndarray) or N.isscalar(other) or \ not hasattr(other, '__rmul__'): return N.dot(self, other) else: return NotImplemented How about I just replace N.dot(self, other) by N.dot(self, asmatrix(other)) or maybe something like try : rhs = asmatrix(other) val = dot(self, rhs) except : val = NotImplemented return val It is not clear to me why the check for __rmul__ is included in the original code, as I believe it causes problems when the rhs is a list, i.e. mat(eye(2))*[1,1] currently fails. Chuck
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion