On Fri, Jul 19, 2013 at 5:31 PM, Nathaniel Smith <n...@pobox.com> wrote: > 3) Extend the gufunc machinery to understand the idea that some core > dimensions are allowed to take on a special "nonexistent" size. So the > signature for dot would be: > (m*,k) x (k, n*) -> (m*, n*) > where '*' denotes dimensions who are allowed to take on the > "nonexistent" size if necessary. So dot(ones((2, 3)), ones((3, 4))) > would have > m = 2 > k = 3 > n = 4 > and produce an output with shape (m, n) = (2, 4). But dot(ones((2, > 3)), ones((3,))) would have > m = 2 > k = 3 > n = <nothing> > and produce an output with shape (m, n) = (2, <nothing>) = (2,). And > dot(ones((3,)), ones((3,))) would have > m = <nothing> > k = 3 > n = <nothing> > and produce an output with shape (m, n) = (<nothing>, <nothing>) = (), > i.e., dot(vector, vector) would return a scalar.
This looks like a fairly clean solution; it could be implemented in a shape pre- and post-processing step, where we pad the array dimensions to match the full signature, and remove it again afterwards. Stéfan _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion