Tim Hochberg wrote: > Bart Vandereycken wrote: >> Hi all, >> >> reading the thread "Ransom proposals" I was wondering why there isn't a >> ndarray.dot() method? There is already a scipy.sparse.dot() so this >> would fit nicely in the whole idea of polymorphism. >> > Are you sure about that? > > The problem with a dot method (aside from a over proliferation of > methods in general) is that to be done correctly you want to choose a > particular implementation of dot based *both* of its arguments. A method > does a good job dispatching on a single argument, but falls down when > dispatching on two types. Let's look at this specific case. Imagine that > in addition ndarray.dot and sparse.dot, we also stick a dot method on > ma.masked, etc. Now in order to fully exploit polymorphism and get > maximum efficiency, we want asparsearray.dot(amaskedarray) to correctly > treat the masked values (ma.dot treats them as zeros) and to not > instantiate a dense version of the sparsearray. But in order to do that > all three classes need to know about the other two. That's possible, if > messy since all three of these are known in advance, but this approach > becomes untenable if you classes outside core numpy or scipy to > participate as full citizens.
You're right that you need to put the class specific dot code somewhere. However, it would be better if this can be done in a clean way. By the way I don't fixate on methods or functions, I just want something useful ;-) Suppose I have written my own matrix class (custmatrix) with it's own fast matrix-vector product. How can I extend numpy code so that is uses this fast multiplication when I want a_custmatrix*a_ndarray or a_ndarray*a_custmatrix? > What does appear fit well here is generic functions / multimethods / > protocols as discussed in some detail on pydev-3000 a couple of months > ago. This would allow classes defined outside of core numpy and scipy to > work correctly and efficiently with dot as long as they register > appropriate versions of dot. If I wasn't swamped right at the moment I'd > prototype this up and see how it works in practice. Right, I was thinking about multimethods too after reading http://www.artima.com/weblogs/viewpost.jsp?thread=101605 The other solution that simulates double dispatching is the Visitor pattern, but it has a lot of disadvantages (difficult to add custom matrices, slow?, all the matrices have to be children of an abstract class). Bart Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion