[Numpy-discussion] matmul as a ufunc

Matti Picus matti.picus at gmail.com
Mon May 21 20:42:33 EDT 2018

I have made progress with resolving the issue that matmul, the operation 
which implements `a @ b`, is not a ufunc [2]. Discussion on the issue, 
which prevents the __array_ufunc__ mechanism for overriding matmul on 
subclasses of ndarray, yeilded two approaches:

- create a wrapper that can convince the ufunc mechanism to call 
__array_ufunc__ even on functions that are not true ufuncs

- expand the semantics of core signatures so that a single matmul ufunc 
can implement matrix-matrix, vector-matrix, matrix-vector, and 
vector-vector multiplication.

I have put up prototypes of both approaches as pr 11061 [0] and 11133 
[1], they are WIP to prove the concept and are a bit rough. Either 
approach can be made to work.

Which is preferable?

What are the criteria we should use to judge the relative merits 
(backward compatibility, efficiency, code clarity, enabling further 
enhancements, ...) of the approaches?


[0] https://github.com/numpy/numpy/pull/11061
[1] https://github.com/numpy/numpy/pull/11133
[2] https://github.com/numpy/numpy/issues/9028

More information about the NumPy-Discussion mailing list